我像这样分配一些 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 代码中使用,还是我错过了其他东西?