什么是内存泄漏?

eyoexply 2003-06-29 08:35:49
举个例子!
...全文
25 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
simouse 2003-06-30
  • 打赏
  • 举报
回复
只要有new/new []分配出的内存没有delete/delete []的都算内存泄漏
budzhang 2003-06-30
  • 打赏
  • 举报
回复
试着把上面hello函数里的
NewClass->~AnyClass();
换成
delete NewClass;

再看一下。

budzhang 2003-06-30
  • 打赏
  • 举报
回复
一般而言,在NT/2000里,一个进程终止时,系统会释放其所占用的内存。
从这个角度讲,如下定义“内存泄漏”为好:

在程序运行期间,动态分配内存空间后,在它变成不可重用的空间时没有释放它。
budzhang 2003-06-30
  • 打赏
  • 举报
回复
下面的程序造成了“内存泄漏”,析构函数与delete不一样。

#include <stdio.h>
#include <stdlib.h>

class AnyClass
{
public:
AnyClass(int n){M=n;};
~AnyClass(){M=0;};
private:
int M;
};

void hello();

void main()
{
int i;

puts("请看一下占用的内存");
system("pause");
for(i=0;i<1000000;i++){
hello();
}
puts("请再看一下占用的内存");
system("pause");
}

void hello()
{
AnyClass* NewClass = new AnyClass(10);
NewClass->~AnyClass();
}
Inkick 2003-06-30
  • 打赏
  • 举报
回复
楼上的,你的说法好像不太准确~~~~~~~
class AnyClass
{
public:
AnyClass(int n);
~AnyClass();
private:
int M;
}

void main()
{
AnyClass* NewClass = new AnyClass;
NewClass.~AnyClass();
}

这个也造成内存泄漏了吗?
zalyer 2003-06-29
  • 打赏
  • 举报
回复
呵呵。学习一下。
晨星 2003-06-29
  • 打赏
  • 举报
回复
呵呵,好像有些网友还不太明白,那就再写个没有内存泄漏的,不过挺无聊的。:)


int main()
{
int* p;
for(int i = 0 ; i < 32767 ; i++)
{
p = new int[32767];
delete[] p;
}
return 0;
}

^o^
xueqt 2003-06-29
  • 打赏
  • 举报
回复
嘿嘿,学习
yonk 2003-06-29
  • 打赏
  • 举报
回复
如果整个程序结束,分配给该程序的内存也就被系统收回。但是如果程序没有结束,一些该释放的内存块没有办法找到,就形成了泄漏。
flyswift 2003-06-29
  • 打赏
  • 举报
回复
在C和C++中,内存汇漏是N大个问题,不过在JAVA中根本没有这个问题,因为有一个垃圾回收的线程时刻紧跟程序,一瞅到CPU有空就回收内存.
jeff__lueny 2003-06-29
  • 打赏
  • 举报
回复
数据被拷贝以后,必须释放老的内存块,以便程序的其他部分在需要新的内存块时候使用.DELETE关键字NEW的对应关键字,任何由NEW分配的内存块必须用DELETE释放(如果忘记了使用DELETE,这个内存块就不能使用了,这称为内存泄露(menory leak)).
jeff__lueny 2003-06-29
  • 打赏
  • 举报
回复
简单的说,就是NEW了以后,没有DELETE!
overawe 2003-06-29
  • 打赏
  • 举报
回复
不归换吧...
zhangxiaoping 2003-06-29
  • 打赏
  • 举报
回复
好像不太对,堆对象的作用域使整个程序的生命期,程序结束了那几个int没有自动归还马?
idontlikenickname 2003-06-29
  • 打赏
  • 举报
回复


被你征用了有没有释放给系统,造成可用内存越来越少~
看起来就跟泄漏一样~~

极速小王子 2003-06-29
  • 打赏
  • 举报
回复
我不记得了,大概意思就是某个内存块没有了相应的程序管理了,成了一个自由的块。系统无法释放它。
Wenxy1 2003-06-29
  • 打赏
  • 举报
回复
上面的程序运行一次就泄露了:32767*2Byte 的内存。
只有重启操作系统,泄露的了内存才交于操作系统管理。
fullsail 2003-06-29
  • 打赏
  • 举报
回复
就是你向系统的申请的内存,使用完了没有还给系统,系统迟早要找你要帐。(内存不足。)
晨星 2003-06-29
  • 打赏
  • 举报
回复
int main()
{
int* p;
for(int i = 0 ; i < 32767 ; i++)
p = new int[32767];

return 0;
}

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧