1

クラスのメンバーとして CStrings の配列があります。

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

クラスのデストラクタは正しく呼び出されますが、私の分析ツールは、7 つの mString のそれぞれに (クラスの割り当てと割り当て解除を行うたびに) メモリ リークがあることを示しています。

CStrings はメモリ自体を管理していると思いました。それらを配列に入れているという事実は、ここで何かを変えますか?

4

2 に答える 2

1

いいえ、それは漏れてはいけません。newまたはnew[](または)を割り当て、メモリmallocを解放(、、deleteまたはdelete[])しない限り、リークは発生しません。free

あなたの場合、アレイは自動ストレージにあるため、自動的にクリーンアップされます。また、CStringsは自動的にメモリを管理します。誤検知であるか、問題の原因となっている他のコードがあります。

編集-aCStringはリークしませんが、誤検知は当てはまらない可能性があります。次のように初期化するチャンスはありますか?

unsigned char* x = new unsigned char[10];
CString str(x);

と忘れてdelete[] x、または同様の何か?

編集2-たぶん、あなたのクラスの削除されていないインスタンスに対してエラーが発生します:

struct X
{
private:
   CString mStrings[7];
};

//...
X* x = new X;
于 2012-05-04T07:40:39.543 に答える
0

ここでCString、実際にはchar *.

これがキャストであり、クラスがそれらを割り当てている場合、デストラクタはそれらの割り当てを解除する必要があります。

そのオブジェクトの削除は浅いものになります。問題があります。

しかし、最後に - の型はCString何ですか?

于 2012-05-04T07:47:16.940 に答える