C++内存泄露的实例源码。
一、如下代码存在内存泄露
#include
using namespace std;
class A
{
public:
private:
};
A::A(char *cstr)
{
}
A::A(const A &ca)
{
}
A::operator=(const A &ca)
{
}
A::A() : str(new char[20])
{
}
A::~A()
{
}
int main(void)
{
}
二、内存泄露的原因
原因在于
A::operator=(const A &ca)
{
}
由于构造函数中已经为str申请了内存,此时为str再次重新申请内存,则原来申请的内存无法收回了。
三、如何针对性地修改
(1) 方法一:
A::operator=(const A &ca)
{
}
实在危险:如果str未被初始化或已经被delete了,则发生致命错误。
(2) 方法二:
A::operator=(const A &ca)
{
}
前提条件A:在A的所有构造函数中必须保证已经为str申请了内存。
(3) 方法三:
A::operator=(const A &ca)
{
}
前提条件B:str在定义时如果未被分配空间则必须初始化为NULL。(因为str在未被分配内存空间时,str是野指针(VC是0xcccccccc),可未必是空指针。)
(4) 结论:方法三是强烈推荐的。
本文链接地址: C++内存泄露的实例源码