我分配一些数据,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
,还是我错过了其他的东西?
答案 0 :(得分:3)
所以,对我而言,似乎OpenGL函数试图释放一些东西
OpenGL永远不会释放客户端提供的指针所指向的任何内存。
对象0x101811bf8的malloc: * 错误:释放对象的校验和错误
这听起来对我来说,你在某个地方有一个超出限制的写入会杀死金丝雀的价值。