C ++:在OpenGL绘图循环中分配内存会导致内存损坏

时间:2014-08-21 15:24:43

标签: c++ memory memory-management opengl-es glibc

我有一个Open GL ES主循环,它调用2个函数;每个循环一次绘制和更新。

以下是绘制循环中的代码:

float* sample_data = userdata->sample_data;
int fft_length = userdata->fft_length;

cout << 'a' << endl;
cout << fft_length << endl;

GLfloat* points = new GLfloat[3 * fft_length];

cout << 'b' << endl;

// Draw tingz
for(int ix = 0; ix < fft_length; ++ ix)
{
    float ratio = float(ix) / float(fft_length - 1);
    float x = -1.0 + 2.0 * ratio;
    float y = sample_data[ix];

    points[3 * ix + 0] = x;
    points[3 * ix + 1] = y;
    points[3 * ix + 2] = 0.0;
}

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, points);
glEnableVertexAttribArray(0);

glDrawArrays(GL_LINE_STRIP, 0, fft_length);

std::cout << 'd' << std::endl;
delete [] points;
std::cout << 'e' << std::endl;

// End of function

输出打印一次,但只打印a256,这是fft的长度。

因此,我认为这是对“&#39; new&#39;出现问题的地方。出现在屏幕上的下一行文字是:

*** glibc detected *** ./main.out: malloc(): memory corruption: 0x01319648 ***

这让我感到困惑,因为我无法立即发现任何错误。我分配内存并再次删除它。我的猜测是我犯了一个我无法发现的愚蠢错误?

0 个答案:

没有答案