现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

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

2012-11-24 20:48 工业·编程 ⁄ 共 877字 ⁄ 字号 评论 1 条

一、什么是内存泄漏

   堆内存空间使用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;
}

目前有 1 条留言    访客:0 条, 博主:0 条 ,引用: 1 条

    外部的引用: 1 条

    • C++中避免内存泄漏的几个绝招 « 求索阁

    给我留言

    留言无头像?