博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++内存未释放的情况
阅读量:6873 次
发布时间:2019-06-26

本文共 1369 字,大约阅读时间需要 4 分钟。

 以下例子中,存储了整数123的记亿体空间不能被删除,因为地址丢失了。这些空间已无法再使用。

1 #include 
2 using namespace std; 3 int main() 4 { 5 int *a = new int(123); 6 cout << *a << endl; 7 // We should write "delete a;" here 8 a = new int(456); 9 cout << *a << endl;10 delete a;11 return 0;12 }
View Code
int* p=new int;p=new int;   //p指针修改,原来申请内存的地址没有记录下来,于是无法释放

 

 

1 void MyFunction(int nSize) 2 { 3  char* p= new char[nSize]; 4  if( !GetStringFrom( p, nSize ) ){ 5   MessageBox(“Error”); 6   return; 7  } 8  …//using the string pointed by p; 9  delete p;10 }
View Code

 

 

 

下面是一个C语言的例子,在函数f()中申请了内存却没有释放,导致内存泄漏。当程序不停地重复调用这个有问题的函数f,申请内存函数malloc()最后会在程序没有更多可用存储器可以申请时产生错误(函数输出为NULL)。但是,由于函数malloc()输出的结果没有加以出错处理,因此程序会不停地尝试申请存储器,并且在系统有新的空闲内存时,被该程序占用。注意,malloc()返回NULL的原因不一定是因为前述的没有更多可用存储器可以申请,也可能是逻辑地址空间耗尽,在环境上测试的时候后者更容易发生。

1  #include 
2 #include
3 4 void f(void) 5 { 6 void* s; 7 s = malloc(50); /* 申请内存空间 */ 8 return; /* 内在泄漏 - 参见以下资料 */ 9 /* 10 * s 指向新分配的堆空间。11 * 当此函数返回,离开局部变量s的作用域后将无法得知s的值,12 * 分配的内存空间不能被释放。13 *14 * 如要「修复」这个问题,必须想办法释放分配的堆空间,15 * 也可以用alloca(3)代替malloc(3)。16 * (注意:alloca(3)既不是ANSI函数也不是POSIX函数)17 */18 }19 int main(void)20 {21 /* 该函数是一个死循环函数 */22 while (true) f(); /* Malloc函数迟早会由于内存泄漏而返回NULL*/23 return 0;24 }
View Code

 

 

转载地址:http://lsofl.baihongyu.com/

你可能感兴趣的文章
使用C++模板实现栈的求最小值功能
查看>>
Python网络编程总结
查看>>
在DELL服务器上升级ESXI 5.5
查看>>
Windows 10 之高级启动模式
查看>>
自动化运维工具安装部署 chef (十)- first cookbook learn httpd
查看>>
线段树的学习之:如何用线段树计算矩形面积
查看>>
UML中组件图
查看>>
linux杂记--nohup cron crontab
查看>>
第一集Linux系统工程师集训之网络部分视频课程
查看>>
【cocos2d-x从c++到js】16:使用cocos2d-console工具转换脚本为字节码
查看>>
Docker容器使用问题:Failed to get D-Bus connection: Operation not permitted
查看>>
企业内网信息安全实践-记ChinaUnix技术交流
查看>>
提高ASP.NET性能与可伸缩性的几个个常用方法剖析
查看>>
Linux运维MySQL必会面试题100道
查看>>
【转载】岁月倾尽,黯然诉说一纸神伤
查看>>
虚拟化系列-VMware vSphere 5.1 VDP备份管理
查看>>
三四五线城市真实的互联网
查看>>
CentOS6.5和RedHat6.5下以rpm方式安装mysql-5.6.20
查看>>
sql执行顺序
查看>>
ZooKeeper开发手册中文翻译
查看>>