C++ 此代码生成错误的原因:堆已损坏

C++ 此代码生成错误的原因:堆已损坏,c++,visual-studio,C++,Visual Studio,使用visual studio 2013,我一直在尝试运行下面的代码,但不知何故,当变量vertexPointer达到7172时,我得到了一个“Heap已损坏”异常。 有时会出现错误:“igdusc32.pdb未加载” 请帮帮我 #define VERTEX_COUNT 128 #define TERRAIN_SIZE 800 int count = VERTEX_COUNT * VERTEX_COUNT; int size3 = count * 3; int size2 =

使用visual studio 2013,我一直在尝试运行下面的代码,但不知何故,当变量vertexPointer达到7172时,我得到了一个“Heap已损坏”异常。 有时会出现错误:“igdusc32.pdb未加载”

请帮帮我

#define VERTEX_COUNT 128
#define TERRAIN_SIZE 800

int count = VERTEX_COUNT * VERTEX_COUNT;
    int size3 = count * 3;
    int size2 = count * 2;
    float* vertices = (float*)malloc(size3);
    float* normals = (float*)malloc(size3);
    float* uvs = (float*)malloc(size2);

int vertexPointer = 0;

for (int i = 0; i<VERTEX_COUNT; i++){
    for (int j = 0; j<VERTEX_COUNT; j++){

        vertices[vertexPointer*3] = (float)j / ((float)VERTEX_COUNT - 1) * TERRAIN_SIZE;
        vertices[(vertexPointer * 3) +1] = 0.0f;
        vertices[(vertexPointer * 3) + 2] = (float)i / ((float)VERTEX_COUNT - 1) * TERRAIN_SIZE;

        normals[vertexPointer * 3] = 0.0;
        normals[(vertexPointer * 3) +1] = 1.0f;
        normals[(vertexPointer * 3) + 2] = 0.0f;

        uvs[vertexPointer * 2] = (float)j / ((float)VERTEX_COUNT - 1);
        uvs[(vertexPointer * 2)+1] = (float)i / ((float)VERTEX_COUNT - 1);

        vertexPointer++;
    }
}
#定义顶点#计数128
#定义尺寸为800的地形
整数计数=顶点计数*顶点计数;
int size3=计数*3;
int size2=计数*2;
float*顶点=(float*)malloc(size3);
浮点*法线=(浮点*)malloc(大小3);
浮动*UV=(浮动*)malloc(大小2);
int VERTEXPOINT=0;

对于(int i=0;i您正在将例如
顶点
分配为
size3
字节,但您需要分配
size3
浮动。因此更改为:

float* vertices = (float*)malloc(size3 * sizeof(float));
float* normals = (float*)malloc(size3 * sizeof(float));
float* uvs = (float*)malloc(size2 * sizeof(float));

或者,这是C++,使用<代码>新< /代码>代替:

auto vertices = new float[size3];
auto normals = new float[size3];
auto uvs = new float[size2];
(然后您的清理必须更改为
delete[]顶点
,等等)

您还可以使用更可取的
std::vector

std::vector<float> vertices(size3);
std::vector<float> normals(size3);
std::vector<float> uvs(size2);
std::向量顶点(size3);
标准:向量法线(大小3);
标准:载体紫外线(大小2);

您正在将例如
顶点
分配为
size3
字节,但您需要分配
size3
浮动。因此更改为:

float* vertices = (float*)malloc(size3 * sizeof(float));
float* normals = (float*)malloc(size3 * sizeof(float));
float* uvs = (float*)malloc(size2 * sizeof(float));

或者,这是C++,使用<代码>新< /代码>代替:

auto vertices = new float[size3];
auto normals = new float[size3];
auto uvs = new float[size2];
(然后您的清理必须更改为
delete[]顶点
,等等)

您还可以使用更可取的
std::vector

std::vector<float> vertices(size3);
std::vector<float> normals(size3);
std::vector<float> uvs(size2);
std::向量顶点(size3);
标准:向量法线(大小3);
标准:载体紫外线(大小2);