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;
}
- C++学习总结_防止内存泄漏
- Android内存泄漏学习总结
- 防止内存泄漏
- flash 防止内存泄漏
- 如何防止内存泄漏
- 防止handler内存泄漏
- 防止内存泄漏
- C/C++怎么有效的防止内存泄漏
- C/C++防止内存泄漏的几种措施
- C++:防止资源泄漏
- Android:内存泄漏调试学习与总结
- 防止handler内存泄漏问题
- BaseAdapter优化防止内存泄漏
- Java内存模型-防止内存泄漏
- 【Opencv学习(二)】内存溢出和内存泄漏总结
- 内存泄漏检测总结
- java内存泄漏总结
- Java 内存泄漏总结
- open 加载和处理图像
- I/O资源如何映射到内核虚拟空间
- C#算法时间测试
- Windows如何用命令修改IP地址,动态和静态切换
- TQ2440 Linux 系统移植(转)
- C++学习总结_防止内存泄漏
- 装配线调度问题 的 动态规划实现
- windows下建立gcc/g++/gdb/make编译及调试C/C++的IDE环境
- POS58票据热敏打印机,怎么用ESC/POS命令控制打印
- 创意
- C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)
- NFS使用方法详解
- MINI6410 AD 管脚的问题 输入电压 浮动
- 一个字符串的面试题