Windows MS VC ++ 2005上的CRT堆调试

时间:2012-06-13 17:20:53

标签: c++ memory memory-leaks visual-studio-2005 heap-corruption

我启用了堆调试,因为我开始在其他人的代码中看到内存泄漏错误,我把问题(至少,所以我认为)归结为类的析构函数,在调用{{1下面。

delete []

现在我确认my_class_member_是一个指向结构对象的指针数组,比如MyClass::~MyClass() { delete [] my_class_member_; } ,已经使用MyStruct分配了属性,所以我不确定导致这个泄漏的原因是什么?以下是new []调用的内容:

new []

接下来,结构delete [] my_class_member_; my_class_member_ = new MyStruct[somesize_]; 也相对简单,如下(剥离):

MyStruct

现在struct MyStruct { MyStruct() {} ~MyStruct() { for( PtrList<PClass>::iterator it(ps); it.more(); it.next() ) { delete it.cur(); } for( PtrList<RClass>::iterator it(rs); it.more(); it.next() ) { delete it.cur(); } delete shift; } PtrList<PClass> ps; PtrList<RClass> rs; }; 是一个指针列表(我们正在使用的应用程序devkit的内置类型)。我很确定这不会有错。无论如何,任何人都注意到这里有什么不合适的?欣赏任何见解..

1 个答案:

答案 0 :(得分:1)

根据OP的要求添加评论作为答案。

您是否遵循了 Rule of Three
根据您提供的信息,您不清楚是否这样做。您需要提供 复制构造函数 复制赋值运算符 < / strong>执行动态分配的成员的 深层复制 。如果您不这样做,并且这两个操作符都不是private而不是undefined那么你不能确定它们根本就没用过,这就是你的问题所在