内存泄漏问题

这个函数动态地分配一个整数,但从未使用删除释放它。因为指针和普通变量遵循相同的规则,函数结束时,pnValue会超出范围。因为pnValue是唯一的变量的地址动态分配的整数,pnValue摧毁时不再有动态分配的内存引用。这就是所谓的内存泄漏。因此,动态分配的整数不能被删除,从而不能重新分配或重用。内存泄漏耗尽空闲内存在程序运行时,不仅使更少的内存可用这个程序,但其他程序。项目与严重的内存泄漏问题可以吃所有可用的内存,导致整个机器运行缓慢,甚至崩溃。

也能引起内存泄漏,如果动态分配的内存的指针的地址重新分配到另一个值:

1
2
3
int nValue = 5;
int *pnValue = new int ;
pnValue = &nValue; // old address lost, memory leak results
还可以通过double-allocation获得内存泄漏:
1
2
int *pnValue = new int ;
pnValue = new int ; // old address lost, memory leak results

从第二个返回的地址分配覆盖第一个的地址分配。因此,第一个分配成为一个内存泄漏!

空指针(第二部分)

空指针(指针地址0)在处理动态内存分配时尤其有用。一个空指针基本上是说“没有被分配内存”。这让我们做事像有条件地分配内存:
1
2
3
// If pnValue isn't already allocated, allocate it
if (!pnValue)
     pnValue = new int ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值