Проблемы с Vertex array

Привет всем!

Не могу никак разобраться с vertex array, либо не рисуется либо, если обращаться по элементо приводит вылету приложения. Причем приложение в debug сессии выдают ошибку обращение к не валидному участку памяти.

Подскажите, что я делаю не так.

Вот код

#include <iostream>
#include "include/GL/freeglut.h"

using namespace std;

void SetupRC();
void ChangeSize(int w, int h);
void RenderScene();
void Time(int t);
void MoveCallback(int x, int y);
void MouseCallback(int button, int state, int x, int y);

void main(int argc, char **argv)
{
   glutInit(&argc, argv);
   glutInitContextVersion(2, 0);
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
   glutInitWindowSize(640, 480);
   glutCreateWindow("test array");
   glutDisplayFunc(RenderScene);
   glutMouseFunc(MouseCallback);
   glutReshapeFunc(ChangeSize);
   glutTimerFunc(100,Time,1);
   SetupRC();
   std::cout<<glGetString(GL_VERSION);
   RenderScene();
   glutMainLoop();
}
void MouseCallback(int button, int state, int x, int y)
{
  if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
  {

  }
  if(button == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN)
  {

  }
}
void MoveCallback(int x, int y)
{

}
void SetupRC()
{
   glColor3f(0.0f, 1.0f, 0.0f);
   glShadeModel(GL_SMOOTH);
   glClearColor(0.0f, 0.0f, 0.3f, 1.0f);
}
void Time(int t)
{
  RenderScene();
  glutSwapBuffers();
   glutTimerFunc(100, Time, 1);
}
void ChangeSize(int w, int h)
{
   float aspectRatio;
   if (h == 0) h = 1;
   glViewport(0, 0, w, h);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   aspectRatio = (float)w / (float)h;
   gluPerspective(45, aspectRatio, 1.0, 425);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
}
void RenderScene()
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();

  glPushMatrix();
  glTranslatef(0.0f, 0.0f, -30.f);
  static GLfloat vert [] = {0.0f, 0.0f, -4.0f,
            -1.0f, -2.0f, -4.0f,
            3.0f, -2.0f, -4.0f,
            3.0f, 0.0f, -4.0f};
  static GLfloat color [] = {0.0f, 0.0f, 0.0f,
            1.0f, 1.0f, 0.0f,
            1.0f, 1.0f, 1.0f,
            1.0f, 1.0f, 0.0f};
  static GLint index [] = {0, 1, 2,
            3, 4, 5,
            6, 7, 8,
            9, 10, 11};

  /*glBegin( GL_QUADS );
    glColor3f(0.1f, 0.0f, 0.0f );
    glVertex3f(0.0f, 0.0f, -4.0f);
    glColor3f(0.0f, 1.0f, 0.0f );
    glVertex3f(-1.0f, -2.0f, -4.0f);
    glColor3f(0.0f, 0.0f, 1.0f );
    glVertex3f(3.0f, -2.0f, -4.0f);
    glColor3f(0.0f, 0.0f, 1.0f );
    glVertex3f(3.0f, 0.0f, -4.0f);
  glEnd();*/
  //glColor3f(0.1f, 1.0f, 1.0f );
  glEnableClientState(GL_COLOR_ARRAY);
  glEnableClientState(GL_VERTEX_ARRAY);
  glColorPointer(3, GL_FLOAT, 0, &color[0]);
  glVertexPointer(3, GL_FLOAT, 0, &vert[0]);
  glBegin(GL_LINE);// что здесь не пиши все равно crash
  glArrayElement(2);
  glArrayElement(3);
  //glArrayElement(3);
  //glArrayElement(3);
  glEnd();
  //glDrawElements(GL_QUADS, 12, GL_INT, index);
//если рисуешь через DrawElements то ошибка доступа к памяти не возникает, но не рисуется!
  glPopMatrix();
  glutSwapBuffers();
}

Извиняюсь за корявый код)))