C++ 创建数组c++;

C++ 创建数组c++;,c++,C++,我基本上是用这个算法为我的游戏中的平面生成一个数组,但是我无法让它工作,因为当我运行这个程序时出现了一个异常。(GLuint在opengl中只是无符号的int) const GLuint平面尺寸=30.0f; const GLuint half=平面尺寸/2; const GLuint verticesCount=平面尺寸*平面尺寸; int计数器=0; GLfloat平面顶点[垂直计数]; 用于(胶合长度=0;长度

我基本上是用这个算法为我的游戏中的平面生成一个数组,但是我无法让它工作,因为当我运行这个程序时出现了一个异常。(GLuint在opengl中只是无符号的int)

const GLuint平面尺寸=30.0f;
const GLuint half=平面尺寸/2;
const GLuint verticesCount=平面尺寸*平面尺寸;
int计数器=0;
GLfloat平面顶点[垂直计数];
用于(胶合长度=0;长度<平面尺寸;长度++){
用于(粘合宽度=0;宽度<平面尺寸;宽度++){
平面顶点[计数器++]=长度-一半;
平面顶点[计数器++]=0.0f;
平面顶点[计数器++]=宽度-一半;
}
}

您正在访问循环中的阵列外部。对于
planeVertices
中的每个元素,循环都有一次迭代。但在循环中,每次都要递增
计数器
3次。因此,通过所有循环
计数器
的大约1/3将到达数组的末尾,然后您将开始在数组外部写入,这将导致未定义的行为

我不知道你想做什么。为什么每次通过循环都要写入3个不同的数组元素?所以不清楚如何修复它。您可以简单地将其声明为3倍大:

GLfloat planeVertices[verticesCount * 3];
或者可以将其声明为二维数组:

GLfloat planeVertices[verticesCount][3];
然后,您的循环将执行以下操作:

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

最重要的是,你调用了3次计数器递增。太多了。你的阵列太小了3倍。
planeVertices[counter][0] = length - half;
planeVertices[counter][1] = 0.0f;
planeVertices[counter][2] = width - half;
counter++;