исключение, возникающее при создании массива c

#c

#c

Вопрос:

Я в основном генерирую массив для плоской плоскости в своей игре, используя этот алгоритм, но я не смог заставить его работать, поскольку при запуске программы возникает исключение. (GLuint — это просто unsigned int в opengl)

 const GLuint planeDimension = 30.0f;
const GLuint half = planeDimension / 2;
const GLuint verticesCount = planeDimension * planeDimension;
int counter = 0;
GLfloat planeVertices[verticesCount];

for (GLuint length = 0; length < planeDimension; length  ) {
    for (GLuint width = 0; width < planeDimension; width  ) {
        planeVertices[counter  ] = length - half;
        planeVertices[counter  ] = 0.0f;
        planeVertices[counter  ] = width - half;
    }
}
  

Комментарии:

1. Чаще всего вы вызываете увеличение счетчика в 3 раза. Это 2 слишком много. Ваш массив всего в 3 раза меньше для этого.

Ответ №1:

Вы обращаетесь к внешнему массиву в своем цикле. Ваш цикл имеет как одну итерацию для каждого элемента в planeVertices . Но вы увеличиваете counter 3 раза каждый раз в цикле. Таким образом, примерно 1/3 пути через все циклы counter дойдет до конца массива, после чего вы начнете писать вне массива, что вызывает неопределенное поведение.

Я не уверен, что вы пытаетесь сделать. Почему вы записываете 3 разных элемента массива каждый раз через цикл? Так что не ясно, как это исправить. Вы могли бы просто объявить его в 3 раза больше:

 GLfloat planeVertices[verticesCount * 3];
  

Или вы можете объявить его как 2-мерный массив:

 GLfloat planeVertices[verticesCount][3];
  

Тогда ваш цикл будет выполнять:

 planeVertices[counter][0] = length - half;
planeVertices[counter][1] = 0.0f;
planeVertices[counter][2] = width - half;
counter  ;