我有一個內存泄漏問題,(如果它很重要,他們是一類不知道)這是關係到一個類的內部結構的數組的數組的動態內存。當我在結構上調用delete時,內存不會被清除。當我使用與int和dbl完全相同的進程時,它可以正常工作,並按需要釋放內存。困惑刪除分配結構
我創建非常簡單的例子,他們能正確工作,它涉及到其他代碼的東西,但我不知道那會是什麼。我從來沒有得到任何錯誤,代碼正確執行。但是,分配/解除分配發生在一個循環中,因此內存使用率不斷上升。
換句話說,這裏的問題的總結:
struct myBogusStruct {
int bogusInt1, bogusInt2;
};
class myBogusClass {
public:
myBogusStruct *bogusStruct;
};
void main(void) {
int i, arraySize;
double *bogusDbl;
myBogusClass bogusClass;
// arraySize is read in from an input file
for(i=0;i<100;i++) {
bogusDbl = new double[arraySize];
bogusClass.bogusStruct = new myBogusStruct[arraySize];
// bunch of other code
delete [] bogusDbl; // this frees memory
delete [] bogusClass.bogusStruct; // this does not free memory
}
}
當我刪除的其他代碼的一羣,都刪除線正常工作。然而,當它在那裏時,第二條刪除線什麼也不做。再次,我從來沒有從代碼中得到任何錯誤,只是內存泄漏。另外,如果我用一個固定的數字替換arraySize如5000,那麼兩個刪除行都能正常工作。
我真的不知道從哪裏開始尋找 - 什麼可能導致刪除線不工作?
「一堆其他的代碼」可能是隨指針搞亂。一個好的開始是通過valgrind運行代碼。另外,使用std :: vector。 – DanielKO
好的 - 我搞砸了這個例子。事實上,arraySize的確會改變。我在那裏列出的for循環實際上是一個將arraySize作爲參數的子程序,被稱爲一堆。我試圖簡化......我想我的主要困惑是爲什麼雙工程按預期工作,而結構沒有。關於弄亂指針 - 我當然看到了這種可能性,但看不到任何事情正在做。這會導致刪除操作員無法工作? –