CString -> 内存泄漏数组?

Array of CString -> Memory Leak?

本文关键字:泄漏 数组 内存 gt CString      更新时间:2023-10-16

我的类中有一个CStrings数组作为成员:

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

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

我以为CStrings自己管理他们的记忆。我将它们放在数组中的事实会改变这里的任何内容吗?

不,这不应该泄漏。除非您分配newnew[](或malloc)并且不释放(deletedelete[]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的类型是什么?