1

我有一个 CStrings 数组作为我班级的成员:

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

尽管类的析构函数被正确调用,但我的分析工具告诉我,七个 mString 中的每一个都存在内存泄漏(每次我分配和解除分配我的类时)。

我认为 CStrings 自己管理他们的内存。我将它们放在一个数组中的事实是否会改变这里的任何东西?

4

2 回答 2

1

不,那不应该泄漏。new除非您使用or new[](or malloc) 分配并且不释放 (with delete, delete[]or 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 回答