C++内存泄漏问题,求助!

vcgaoshou 2018-11-11 09:46:39
//内存泄露
#include<iostream>
using namespace std;
class Array{
int *p;
int size;
public:
Array(int n=1024){
size = n;
p=new int[size*size];
cout<<"申请内存"<<endl;
}
~Array(){
cout<<"释放内存"<<endl;
// delete [] p;此处注释后,应该产生内训泄漏
}
};
int main(){
long i,j,k;
for(i=0;i<1024;i++)
for(j=0;j<1024;j++)
for(k=0;k<1024;k++)
{
cout<<(i*1024+j)*1024+k<<" ";
Array a;//局部对象,出{}释放,调用析构函数
}
return 0;
}
上题应该存在严重的内存泄漏,但是用VC++6.0编译,运行后,运行速度始终很快,没有任何变化,运行到结束,机器都没死机。我的计算机是4G内存,即2^31,程序循环了2^30次,每次申请2^20,按照理论计算,最多循环2^11次,就把内存全部泄漏了。就要出现死机现象。
...全文
67 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2018-11-11
  • 打赏
  • 举报
回复
这些操作都是通过系统内核的,内核都有极强的保护措施
幻夢之葉 2018-11-11
  • 打赏
  • 举报
回复
怎么可能死机 =。= 内存不够就申请失败返回nullptr
操作系统早就考虑过这种明显的漏洞
zy010101 2018-11-11
  • 打赏
  • 举报
回复
你需要用任务管理器监控一下,windows下32位的单进程最多占用2GB内存。不会死机的。
smwhotjay 2018-11-11
  • 打赏
  • 举报
回复
调用的是Array 默认构造吧。
tq1086 2018-11-11
  • 打赏
  • 举报
回复
如果没有重载new,内存不足会抛出bad_alloc。如果没有捕获异常,程序会退出,不会死机。
yshuise 2018-11-11
  • 打赏
  • 举报
回复
没看清楚。可以的。哈哈,很久不搞c++了
yshuise 2018-11-11
  • 打赏
  • 举报
回复
Array a;//局部对象,出{}释放,调用析构函数
===============================
new必须delete才释放。

64,679

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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