0

我像这样分配一些 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数据会使程序崩溃,我不必使用分配对象中的任何数据来获得崩溃。我是否不允许malloc在这样的 Cocoa 代码中使用,还是我错过了其他东西?

4

1 回答 1

3

所以,对我来说,似乎 OpenGL 函数正试图释放一些东西

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

malloc: *对象 0x101811bf8 错误:释放对象的校验和不正确

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

于 2013-07-22T15:37:14.287 回答