一 概述
由于使用new创建的内存空间不会被系统自动释放,因此假如你不去释放它,那么该区域的内存将始终不能为其他数据所使用,而指向该内存的指针是个局部变量,当定义该指针的函数结束并返回时,指针也就消失了,那么我们就再也找不到该块内存区域,就像重拨键中记录的号码一行,假如重拨键中的号码自动消失了,那么我们将再也访问不到安徽出版社了。
同样的道理,假如指向该内存区域的指针自动消失了,计算机就再也找不到该区域的内存了,就好像是丢失了这块内存一样,我们把这种情况叫做内存泄漏。
这种糟糕的情况将一直持续到程序结束,该区域的内存才能恢复使用。因此,假如你不需要一块内存空间,那么就必须对指向它的指针使用关键字delete
二 代码及输出结果
2.1 示例一
2.1.1 代码
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include<iostream> using namespace std; int main() { int *p=new int; delete p; p=new int; delete p; //p=0; delete p; delete p; return 0; }
|
2.1.2 结果
2.1.3 原因分析
- 因为p所指向的内存区域已经被释放,如果再进行释放,将会使程序崩溃
- 不过,假如我们将该指针赋为0的话,那么删除一个空指针将是安全的
2.2 示例二
2.2.1 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include<iostream> using namespace std; int main() { int *p = new int; *p = 3600; cout << *p << endl; delete p; cout << *p << endl; p = 0; p = new int; *p = 8; cout << *p << endl; delete p; return 0;
}
|
2.2.2 输出结果