使用malloc分配的数据与OpenGL时的内存问题

时间:2013-07-22 15:23:00

标签: objective-c cocoa opengl

我分配一些数据,C风格,像这样(遗漏了一些初始化代码):

room_t* make_room(int width, int height)
{
    room_t* room = (room_t*) malloc(sizeof(room_t));

    /* Initialization code sets some stuff, no allocations */

    return room;
}

之后,我在继承自NSOpenGLView的Cocoa视图中使用此函数,如下所示:

- (void) drawRect: (NSRect) bounds
{
    room_t* room = make_room(4, 4);

    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);

    draw_room(room, 0);

    destroy_room(room);
}

draw_room是一个简单的函数,可以绘制几个三角形,destroy_room释放对象。但是,我在glClear(SIGABRT)上收到错误,如下所示:

malloc: *** error for object 0x101811bf8: incorrect checksum for freed object - object was probably modified after being freed.

所以,对我而言,似乎OpenGL函数试图释放一些东西,但我不确定。无论哪种方式,如果我停止使用我的malloc'd对象,而只是绘制硬编码的三角形,一切正常。

我还应该说,只分配room_t数据会导致程序崩溃,我不必使用分配对象中的任何数据来获取崩溃。我不允许在这样的Cocoa代码中使用malloc,还是我错过了其他的东西?

1 个答案:

答案 0 :(得分:3)

  

所以,对我而言,似乎OpenGL函数试图释放一些东西

OpenGL永远不会释放客户端提供的指针所指向的任何内存。

  对象0x101811bf8的

malloc: * 错误:释放对象的校验和错误

这听起来对我来说,你在某个地方有一个超出限制的写入会杀死金丝雀的价值。