这个函数动态地分配一个整数,但从未使用删除释放它。因为指针和普通变量遵循相同的规则,函数结束时,pnValue会超出范围。因为pnValue是唯一的变量的地址动态分配的整数,pnValue摧毁时不再有动态分配的内存引用。这就是所谓的内存泄漏。因此,动态分配的整数不能被删除,从而不能重新分配或重用。内存泄漏耗尽空闲内存在程序运行时,不仅使更少的内存可用这个程序,但其他程序。项目与严重的内存泄漏问题可以吃所有可用的内存,导致整个机器运行缓慢,甚至崩溃。
也能引起内存泄漏,如果动态分配的内存的指针的地址重新分配到另一个值:
|
1
2
3
|
int
nValue = 5;int
*pnValue = new
int;pnValue
= &nValue; //
old address lost, memory leak results |
|
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 itif
(!pnValue) pnValue
= new
int; |
13万+

被折叠的 条评论
为什么被折叠?



