gpt4 book ai didi

c++ - 带有小数组的删除 [] 上的 SIGTRAP

转载 作者:行者123 更新时间:2023-12-04 01:01:10 24 4
gpt4 key购买 nike

我的一个 C++ OpenGL 程序中出现了一个奇怪的 SIGTRAP 错误。
首先,创建一个带有 new[] 运算符的浮点数组,如下所示:

std::vector<ObjFace> faces = readObjFile("sphere.obj");
vertexBufferSize = faces.size() * 24;
auto* vertexBuffer = new GLfloat[vertexBufferSize];
然后,数组填充如下:
    for (int i{ 0 }; i < faces.size(); ++i) {
for (int j{ 0 }; j < 4; ++j) {
vertexBuffer[i*24 + j*8] = faces[i].corners[j][0];
vertexBuffer[i*24 + j*8 + 1] = faces[i].corners[j][1];
vertexBuffer[i*24 + j*8 + 2] = faces[i].corners[j][2];
vertexBuffer[i*24 + j*8 + 3] = 1.0f;
vertexBuffer[i*24 + j*8 + 4] = (faces[i].normals[j][0] + 1) / 2;
vertexBuffer[i*24 + j*8 + 5] = (faces[i].normals[j][1] + 1) / 2;
vertexBuffer[i*24 + j*8 + 6] = (faces[i].normals[j][2] + 1) / 2;
vertexBuffer[i*24 + j*8 + 7] = 1.0f;
}
}
然后它与 glBufferData 一起使用宏并随后删除:
glBufferData(GL_ARRAY_BUFFER, vertexBufferSize * sizeof(GLfloat), vertexBuffer, GL_STATIC_DRAW);

delete[] vertexBuffer;
vertexBuffer = nullptr;
出于某种原因,程序有时会因 SIGTRAP 错误( Debug模式)或退出代码 -1073740940 (0xC0000374)(常规执行)而崩溃。我还确保 vertexBuffer不是空指针。
仅当数组大小相对较小时才会出现此问题。对于更大的尺寸,它可以毫无问题地工作。为了让它在更小的尺寸下工作,我不能使用 new[]delete[] - 但是它会在更大的阵列上崩溃,因为它们占用太多空间。有人可以向我解释这里发生了什么吗?

最佳答案

你在每个面上写了 32 个浮点数,但你似乎认为你只写了 24 个。你为每个面分配了 24 个浮点数并向前跳过了 24 个浮点数以到达下一个面,但实际上你在每个面上写了 32 个浮点数,因为你每个顶点写 8 个浮点数,每个面写 4 个顶点。所以你总是在数组结束后写一个额外的 8 个浮点数。

关于c++ - 带有小数组的删除 [] 上的 SIGTRAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68176492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com