首页 > 代码库 > C++内存未释放的情况
C++内存未释放的情况
以下例子中,存储了整数123的记亿体空间不能被删除,因为地址丢失了。这些空间已无法再使用。
1 #include <iostream> 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 }
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 }
下面是一个C语言的例子,在函数f()中申请了内存却没有释放,导致内存泄漏。当程序不停地重复调用这个有问题的函数f,申请内存函数malloc()最后会在程序没有更多可用存储器可以申请时产生错误(函数输出为NULL)。但是,由于函数malloc()输出的结果没有加以出错处理,因此程序会不停地尝试申请存储器,并且在系统有新的空闲内存时,被该程序占用。注意,malloc()返回NULL的原因不一定是因为前述的没有更多可用存储器可以申请,也可能是逻辑地址空间耗尽,在Linux环境上测试的时候后者更容易发生。
1 #include <stdio.h> 2 #include <stdlib.h> 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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。