简单点说就是只申请不释放:
在c++中我们通过malloc,new来通过系统申请内存,但当我们使用完毕之后代码里面可能就没有执行相应的free和delete的操作,这样我们申请的这部分内存系统就不会再次的回收分配,这就造成了内存泄露!!!
http://blog.csdn.net/zcsylj/article/details/6409490
这篇帖子讲的很细大家可以研究研究。
我们在delete一个指针之后要将这个指针置NULL,
为啥要这么搞呢?因为delete之后我们只是释放掉了这个指针所指的内存,这块内存OS是可以再分配给其他人来使用的,
这样这个指针就成了野指针,这个野指针会在code的其他地方被修改,进而影响其他人对这块内存的使用。
所以这种情况我们不能称之为内存泄露,只能说是野指针造成影响其他人对这块内存的使用。
但这种情况会造成程序的崩溃:为啥呢?
因为这个野指针我们已经我发把控了,程序的访问内存中的内容我们也就无法把控,所以程序也就跑飞了
有个小例子:
class Obj
{
public:
Obj( )
{ cout << "Initialization" << endl; }
~ Obj( )
{ cout << "Destroy" << endl; }
void Initialize( )
{ cout << "Initialization" << endl; }
void Destroy( )
{ cout << "Destroy" << endl; }
}obj;
void UseMallocFree( )
{
Obj * a = (Obj *) malloc( sizeof ( obj ) ); // allocate memory
a -> Initialize(); // initialization
// …
a -> Destroy(); // deconstruction
free(a); // release memory
}
void UseNewDelete( void )
{
Obj * a = new Obj;
// …
delete a;
}