下面三种常见的程序错误都与动态内存分配相关:
1.删除( delete )指向动态分配内存的指针失败,因而无法将该块内存返还给自由存储区。删除动态分配内存失败称为“内存泄漏(memory leak)”。内存泄漏很难发现,一般需等应用程序运行了一段时间后,耗尽了所有内存空间时,内存泄漏才会显露出来。
2.
读写已删除的对象。如果删除指针所指向的对象之后,将指针置为 0 值,则比较容易检测出这类错误。
3.
对同一个内存空间使用两次 delete 表达式。当两个指针指向同一个动态创建的对象,删除时就会发生错误。如果在其中一个指针上做 delete 运算,将该对象的内存空间返还给自由存储区,然后接着 delete 第二个指针,此时则自由存储区可能会被破坏。
动态对象的创建和删除需要用new和delete关键字。
一种好的编程实践告诉我们应该如下释放动态new创建的指针:
string *p =new string("123");
delete p ;
p=0;
printf("%d\n",p);
先delete指针,然后再置指针为0.