2012-04-30 206 views
0

我遇到了大量內存泄漏的問題。C++ CRT內存泄漏

CRT顯示泄漏在例如下面的代碼:

char *cmd = new char[128]; 

我該怎麼辦?

char *cmd = new char[128]; 
delete[] cmd; 

我用上面的代碼啓動了VLD(Visual Leak Debugger)的新項目,它仍然說我漏了。

+0

當然我刪除這個引用,所有 – Hakon89

+0

你調用'delete []'? – EdChum

+1

@keety我認爲刪除[] * cmd –

回答

3

基本上,只要停止使用它,您就需要釋放內存。

一些很好的自動化C++技術是RAIIsmart pointers

也可以考慮memory leaks上的維基百科文章。

+0

謝謝我以前閱讀過,但仍然不知道什麼是問題.. – Hakon89

+0

@ Hakon89問題是內存不回收到系統。你應該通過'delete'操作符返回你不再使用的資源,否則你的程序和操作系統會感覺不好。 – ulidtko

0

您應該致電delete[] arrayVariable;而不是delete arrayVariable;以避免與陣列有關的內存泄漏。

+0

是的,我刪除[]而不是隻是刪除 – Hakon89

0

在泄漏檢測運行後,可能會刪除您的對象。

例如,如果您有靜態對象,則必須注意刪除順序,以便在泄漏檢測發生之前將其刪除。

嘗試在函數中嵌入新/刪除並查看是否仍然報告泄漏:如果沒有,那麼問題可能確實與泄漏檢測執行後刪除的對象有關。

0

使用:

std::vector<char> cmd(128); 

每當你需要訪問的char *緩衝區,你可以這樣做:

char* memory = &char[0]內存是保證持續的std ::向量。 不需要刪除,因爲內存屬於對象。這使得你的代碼也是異常安全的,例如,如果在執行刪除操作之前拋出異常,你將不會泄漏內存[]

你也可以使用C++ 11中的新std :: array也如果你想分配在堆棧