使用new时,出现内存不足

herrycsdn 2004-01-31 03:05:07
因为用了几个new分配了不少空间,以至于运行时出现“内存不足”的警告,请问如何避免。本人的程序只是用来做试验,能用就行了。多谢指点
...全文
973 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharkhuang 2004-02-03
  • 打赏
  • 举报
回复
查查你程序是不是内存泄漏才是正解!
山中老狼 2004-02-03
  • 打赏
  • 举报
回复
用完以后一定要记的用delete回收空间啊!
herrycsdn 2004-02-03
  • 打赏
  • 举报
回复
如何查?请指点,谢谢
Iaoapbicfis 2004-02-02
  • 打赏
  • 举报
回复
比尔盖斯讲过:每个人只要690KB的内存就够了。
你的物理内存是多大?虚拟内存是多大?

你是不是在以前运行的程序中使用了new没有配对的使用delete,而积累下来的结果?
Yssss1980 2004-02-02
  • 打赏
  • 举报
回复
90%是你程序的问题
nlstone 2004-02-02
  • 打赏
  • 举报
回复
short* a = new short[256*256];
这才哪到哪,不可能内存不足啊
hifrog 2004-02-02
  • 打赏
  • 举报
回复
由于编译器的限制,给一个程序分配的运行动态栈空间是有限的。不过不知道楼主为什么一次要用new分配那么多空间呢?不过想new那么多空间似乎是被定死的,那我们可以换令一种思路,就是把暂时不用数据放在文件里,只把需要处理的数据作为从文件读入的变量加载到程序堆栈,这也相当于借用磁盘空间做虚拟内存。当然。这需要通过文件输入输出流来控制。

以上只是我的一种思路。如果硬塞,那就要扩充动态分配栈了,不过这需要编译器的支持。
coolness 2004-02-02
  • 打赏
  • 举报
回复
你确定是内存不足的问题吗?!
herrycsdn 2004-02-02
  • 打赏
  • 举报
回复
楼上说得有理
我现在想要一个可以分配空间的方法,除了delete以前分配空间,没有其它方法吗?
谢谢!!
hifrog 2004-02-02
  • 打赏
  • 举报
回复
new是在程序运行空间(堆栈)上分配空间,不是内存不足,而是动态分配栈溢出。
hifrog 2004-02-02
  • 打赏
  • 举报
回复
用new分配空间不足不是内存的限制,而是程序运行时程序堆栈的限制,这和编译器有关。
wangfeng20004 2004-02-02
  • 打赏
  • 举报
回复
计算机可能会因为内存不足而无法满足new的要求,这时C++通常会给出两种解决方法:一,让
new在无法满足内存请求时返回以空指针;二,让new引发bad_alloc异常机制。
下面的程序清单使用了这两种方法:
#include<iostream.h>
#include<new>
#include<stdlib.h>
struct Big
{
double stuff[2000];
};
void main()
{
Big*pb;
try{
cout<<"trying to get a big block of memory :\n";
pb=new Big[10000];
cout<<"Got past the new request :\n";
}
catch(bad_alloc&ba)
{
cout<<"Cought the exception :\n";
cout<<"ba.what()<<endl;
exit(1);
}
if(pb!=0)
{
pb[0].stuff[0]=4;
cout<<pb[0].stuff[0]<<endl;
}
else
cout<<pb is null pointer :\n"
delete[]pb;
return 0;
}
以上的解释希望你能从中有所收获!
herrycsdn 2004-02-02
  • 打赏
  • 举报
回复
多谢诸位!
是有几个new过没有delete掉的,但是那些分配的空间,我还要使用。大概分配了350kb的空间吧,
wangfeng20004 2004-02-02
  • 打赏
  • 举报
回复
楼上的观点也值得想想,再仔细看看源程序!
sunwt 2004-02-01
  • 打赏
  • 举报
回复
to tlping(音乐虫子

是可以保证new里面的异常产生时,有足够内存抛出此异常的。
nlstone 2004-02-01
  • 打赏
  • 举报
回复
new造成的内存不足症结:
1使用了较小的固定的虚拟内存而造成无法new大内存,可改大或让windows自己管理。
2硬盘空间太小,删掉部分垃圾,使硬盘空间远大于你new的空间

硬盘足够,new一般不会造成内存不足的,我new过至少800Mb的空间(硬盘一阵狂读)
cupidvenus 2004-02-01
  • 打赏
  • 举报
回复
贴出代码来
tlping 2004-02-01
  • 打赏
  • 举报
回复
1,增大虚拟内存。2,购买物理内存
系统级异常建议不要捕获,有可能会出现新的问题,因为本身内存就不足,捕获异常本身也是要消耗异常的,这样会不会出现堆栈溢出?
wshcdr 2004-02-01
  • 打赏
  • 举报
回复
贴出代码来吧
herrycsdn 2004-02-01
  • 打赏
  • 举报
回复
多谢各位指点!!
请问如何捕获异常啊,
程序运行到new这一步就弹出一个“内存不足”的对话框。
以前也常这样用,从来没有出现过这样的问题
加载更多回复(10)

64,637

社区成员

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

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