2012-05-04 50 views
1

我有CStrings數組作爲我班的成員:CString數組 - >內存泄漏?

... 
private: 
CString mStrings[7]; 
... 

雖然類的析構函數被調用正確,我的分析工具,告訴我,有每七個mStrings的內存泄漏(每時間我分配和釋放我的課程)。

我以爲CStrings自己管理自己的記憶。我在數組中擁有它們的事實是否改變了這裏的任何事情?

+1

顯示代碼。什麼是你的分析工具,它什麼時候運行,你的類是如何創建的等等等等等等。 –

+0

你需要向我們展示一些代碼,有一個字符串數組不會改變字符串管理自己的內存。如果你只是像創建一個數組一樣(在自動存儲上),你不需要任何明確的東西來釋放分配的內存。 –

+0

你能否提供更多的代碼來顯示你實際做了什麼以及錯誤是什麼(最好是[sscce](http://sscce.org/))?此外,這是微軟的CString或另一個?這絕對不是標準的C++,所以你應該提到這一點。 – KillianDS

回答

1

不,不應該漏水。除非您分配newnew[](或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; 
+0

好吧,我猜想Memory Validator只是在這裏報告誤報。我對這個工具很陌生,所以我不知道我可以信任它的擴展程度;-) – Boris

+0

@Boris:說實話,如果它對這樣一個簡單的用例給出了誤判,我會進一步調查。要麼你在使用它時做得非常錯誤,要麼這個工具對於任何實際目的都是完全沒有用的。 – KillianDS

+0

@Boris我也認爲一個誤報是很牽強的,你如何構造這些對象? –

0

我打算讓信仰在這裏的飛躍CString實際上是一個char *

如果是這樣的演員和類已經分配它們,析構函數需要取消分配這些。

該對象的刪除將是淺的。有問題。

但最後值得注意的是 - 什麼是CString類型?

+0

Cstring是可以表示Unicode或ASCII字符串的MS特定數據類型。 - http://msdn.microsoft.com/en-us/library/aa300688(v=vs.60).aspx它不是'char *'。 –

+0

這個問題沒有提到這個平臺。如果是的話,我會填補這個空白。 –