我有CStrings數組作爲我班的成員:CString數組 - >內存泄漏?
...
private:
CString mStrings[7];
...
雖然類的析構函數被調用正確,我的分析工具,告訴我,有每七個mStrings的內存泄漏(每時間我分配和釋放我的課程)。
我以爲CStrings自己管理自己的記憶。我在數組中擁有它們的事實是否改變了這裏的任何事情?
我有CStrings數組作爲我班的成員:CString數組 - >內存泄漏?
...
private:
CString mStrings[7];
...
雖然類的析構函數被調用正確,我的分析工具,告訴我,有每七個mStrings的內存泄漏(每時間我分配和釋放我的課程)。
我以爲CStrings自己管理自己的記憶。我在數組中擁有它們的事實是否改變了這裏的任何事情?
不,不應該漏水。除非您分配new
或new[]
(或malloc
)並且不免費(使用delete
,delete[]
或free
)分配內存,否則不會發生泄漏。
在你的情況下,數組是自動存儲,因此它會自動被清理。另外,CString
會自動管理他們的記憶。要麼是誤報,要麼是其他一些導致問題的代碼。
編輯 - 雖然CString
不漏,誤報可能並非如此。你是我的任何機會初始化爲:
unsigned char* x = new unsigned char[10];
CString str(x);
和忘記delete[] x
,或類似的東西?
編輯2 - 也許錯誤來爲您的類的未刪除實例:
struct X
{
private:
CString mStrings[7];
};
//...
X* x = new X;
我打算讓信仰在這裏的飛躍CString
實際上是一個char *
。
如果是這樣的演員和類已經分配它們,析構函數需要取消分配這些。
該對象的刪除將是淺的。有問題。
但最後值得注意的是 - 什麼是CString
類型?
Cstring是可以表示Unicode或ASCII字符串的MS特定數據類型。 - http://msdn.microsoft.com/en-us/library/aa300688(v=vs.60).aspx它不是'char *'。 –
這個問題沒有提到這個平臺。如果是的話,我會填補這個空白。 –
顯示代碼。什麼是你的分析工具,它什麼時候運行,你的類是如何創建的等等等等等等。 –
你需要向我們展示一些代碼,有一個字符串數組不會改變字符串管理自己的內存。如果你只是像創建一個數組一樣(在自動存儲上),你不需要任何明確的東西來釋放分配的內存。 –
你能否提供更多的代碼來顯示你實際做了什麼以及錯誤是什麼(最好是[sscce](http://sscce.org/))?此外,這是微軟的CString或另一個?這絕對不是標準的C++,所以你應該提到這一點。 – KillianDS