2013-07-22 20 views
0

的malloc分配的數據時,我分配一些數據,C風格,像這樣的(一些初始化代碼離開了):內存問題使用OpenGL的

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這樣的:

- (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,還是我錯過的其他東西?

回答

3

所以,對我來說,這似乎是OpenGL函數嘗試一些免費的

的OpenGL永遠不會釋放任何內存由客戶端提供的指針指向。

的malloc:*錯誤對象0x101811bf8:用於釋放對象

這聽起來對我來說,你的地方有越界 - 寫殺死金絲雀值不正確的校驗和。

+0

有時你只需要有人指出你是個白癡。顯然我很喜歡指針算術。我想我開始責怪可可,因爲撞車出現在「錯誤」的地方。謝謝,並遺憾浪費你的時間! – ohrman