OpenGL:线程1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)

问题描述 投票:1回答:1

我有一组点作为三角形绘制。在将它们放在屏幕上之前,我正在使用一个函数来转换它们的位置。但是,在数组上调用translate函数会导致出现上述错误。

    float positions[6] = {
    -0.5f, -0.5f,
    0.0f, 0.5f,
    0.5f, -0.5f
};

//Basic Translate function
void basicTranslate(float Tx, float Ty){
    for(int i=0; i<sizeof(positions); i++){
        if(i % 2 == 0)
            positions[i] += Tx;
        else
            positions[i] += Ty;
    }
}

在处理缓冲区和顶点数组之前翻译函数时会发生错误

    basicTranslate(2, 1);

    unsigned int buffer;
    glGenBuffers(1, &buffer);
    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(float), positions, GL_STATIC_DRAW);
    GLuint vao = 0;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);
opengl exc-bad-access
1个回答
2
投票

sizeof(positions)以字节为单位给出数据类型float[6]的大小,即4*6=24。 见sizeof operator

更改循环中的条件以解决问题:

for(int i=0; i<6; i++)

在C ++中,我建议使用std::vectorstd::array,两者都提供size()方法,它返回容器中元素的数量:

#include <vector>

std::vector<float> positions = {
    -0.5f, -0.5f,
     0.0f,  0.5f,
     0.5f, -0.5f
};

void basicTranslate(float Tx, float Ty)
{
    for(size_t i=0; i<positions.size(); i++)
        positions[i] += (i % 2 == 0) ? Tx : Ty;
}
© www.soinside.com 2019 - 2024. All rights reserved.