p重新调用多次new及delete的内存泄露问题

49 篇文章 0 订阅
35 篇文章 0 订阅

 

#include <iostream>

using namespace std;

 

//使用pTemp是为了看p初始开辟的空间是否被删除。

//但是事实上没有,所有如果这样开辟的空间大,p重新调用多次new就会出现内存泄露的问题!

//delete时不要两次调用!并且最好在delele时候if判断下,并且delete后设置为NULL

//并且这样也方便在编程的时候及时找到错误,因为p=NULL后再调用p就会出错,但是如果只delete[] p,就不会出错,

//但是使用一个已经delete的指针非常危险!

 

int main(int argc, char* argv[])

{

 

int* p=new int[5];//p 开辟5个空间

int* pTemp=p;//保存开始开辟的内存地址

for (int i=0;i<5;i++)

{

p[i]=10;//在原始空间赋值

}

 

p=new int[5];//再用p另外开辟5个空间

 

for (i=0;i<5;i++)

{

p[i]=20;//重新赋值

}

 

delete[] p;

// if (p!=NULL)

// {

// delete[] p;

// p=NULL;

// }

for (i=0;i<5;i++)

{

cout<<p[i]<<" ";//已删除,但是还能用,只是,使用已删除的指针非常危险!

                //如果delete后p=NULL,则会提示错误

}

cout<<endl;

 

for (i=0;i<5;i++)

{

cout<<pTemp[i]<<" ";//原来的空间还有值!!没有删除,如果开始没设置pTemp(而事实上往往如此),

//那么p开始开辟的那块内存就无法删除了!!内存泄露

}

 

//  delete[] p;//指针2次删除

//  delete[] p;//指针2次删除    //程序内存错误,直接崩溃

// if (p!=NULL)

// {

// delete[] p;

// }

// if (p!=NULL)

// {

// delete[] p;             //同样的结果,程序内存错误,直接崩溃

// }

 

if (p!=NULL)                //比较好的写法

{

delete[] p;

p=NULL;

}

if (p!=NULL)

{

delete[] p;

p=NULL;

}

 

return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值