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