更新(已解決):好的,我是完整白癡!在主程序中的「用數據做東西」部分中,我最終增加了指針,所以刪除顯然不起作用! D'哦!刪除在另一個共享庫中分配的指針
所以我編有一個類似的功能(超級簡化視圖)共享庫,該庫在還地雷,所以我知道數據是如何分配的:
// inside library
void* getData(int size) { // with other parameters
UINT8* data = new UINT8[size]; // where typedef uint8_t UINT8; for gcc
// do a socket read, where data is the buffer
blockingRead (someSocket, data, propertySize);
return (void*) data;
}
它返回一個void指針,因爲數據可能是一個結構體(所以可以轉換爲結構體)。
問題是,我在我的主程序中使用了這個指針,我想在完成時刪除它。如果我這樣做,我的主要程序:
// inside main program
char* data = (char*) Library::getData(5);
// do stuff with data
delete[] data; // crashes with:
// *** glibc detected *** core: free(): invalid pointer: 0x00002aaab007bca4 ***
我想,也許我應該在共享庫中刪除,而不是:
// inside library
void disposeData(void* data) { // call this from main program
delete[] (UINT8*) data; // cast it back to the original type of pointer
}
但我仍然得到同樣的崩潰!一切工作正常,如果我不刪除,但我不希望不必要的內存泄漏遍及我的程序。
我可能在某處做某事愚蠢 - 請幫助我找到我的方式錯誤!
編輯:正如在評論中指出的,似乎上述代碼的作品 - 我將不得不看看是什麼具體導致我的代碼中的錯誤。
我認爲你需要創建一個展示你的問題的最小例子。我用g ++試過你的代碼,它運行得很好......沒有崩潰。 – 2011-01-10 21:49:56