C++学习总结_防止内存泄漏

来源:互联网 发布:康奈尔大学知乎 编辑:程序博客网 时间:2024/04/27 10:42

一、什么是内存泄漏:

      堆内存空间使用new 语句创建后是匿名的,所以必须,借助指针记录堆内存的地址。而指针一般被定义为局部变量。
      由于使用new创建的内存空间不会被系统自动释放,因此假如你不去释放她,那么该区域的内存将始终不能为其他数据所使用,而指向该内存的指针是个局部变量,当定义该指针的函数结束并且返回时,指针也就消失了,我们就再也找不到该块中的内存区域,指向该内存区域的指针自动消失了。 计算机就再也找不到该区域的内存了,就好像是丢失了这块内存一样,这种情况被称之为内存泄漏。

 

#include <iostream>

using namespace std;

int main()

{

int *p = new int;

p = new int;//p指针第一次的内存地址被丢掉了,这块堆内存永远不会被使用,只有等到程序结束后再使用。

return 0;

}

 

      这种糟糕的情况一直持续到程序结束该区域的内存才能恢复使用。所以当你不需要一块内存空间,那么就必须对指向该内存空间的指针使用关键自delete释放该指针所指向的内存,也就是释放这块内存,让别人有机会下次再使用这块内存,而不会释放指针,因此你还可以使用该指针。

二、一个使用的例子:

#include <iostream>
using namespace std;
int main()
{
 int *p = new int;
 *p = 144;
 cout<<"*p指向堆内存空间,并给该内存空间赋值后:"<<endl;
 cout<<"*p:"<<*p<<endl;//编译器给*p赋予一个随机的值
 delete p;
 cout<<"释放p所指向的内存空间后:"<<endl;
 cout<<"*p:"<<*p<<endl;
 p = 0;
 p = new int;//一定要记得,在p指针在指空后,如果要在使用该p指针输出*p的值,必须给p赋予新的对内存空间(使用new 类型名)
 *p = 125;
 cout<<"释放p所指向的内存空间后并重新给p赋予新的堆内存空间,再给新的堆内存空间赋值"<<endl;
 cout<<"*p:"<<*p<<endl;
 return 0;
}