new函数失败,内存只用了800M

duyanbin_sy 2013-04-23 08:48:20
一个服务器程序运行二三个小时后,程序执行到new后崩溃,崩溃时内存只使用了800M。
ps:未提示内存不足
有可能是什么原因导致的?
...全文
338 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
youyou1912 2013-05-02
  • 打赏
  • 举报
回复
引用 16 楼 duyanbin_sy 的回复:
预先申请了一块大内存,做了个内存池,运行了一天多了还没崩溃。什么工具能看到内存碎片情况?
VMMap, 你最好的选择 http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx
duyanbin_sy 2013-04-25
  • 打赏
  • 举报
回复
预先申请了一块大内存,做了个内存池,运行了一天多了还没崩溃。什么工具能看到内存碎片情况?
smwhotjay 2013-04-24
  • 打赏
  • 举报
回复
碎片了. 残留内存再多.也分片了.你new个大块,new不到,指针没判断,玩完
神-气 2013-04-24
  • 打赏
  • 举报
回复
不一定是new crash的,有时候是前面一点的代码访问越界,释放出错等等,但是不会立刻crash,会继续执行一段然后才crash。 楼主参考下。
duyanbin_sy 2013-04-23
  • 打赏
  • 举报
回复
申请和释放的比较频繁
duyanbin_sy 2013-04-23
  • 打赏
  • 举报
回复
没有new过大内存,最大80K,然后几秒后就释放了,只不过是map比较大有几万条记录。
kyotrue 2013-04-23
  • 打赏
  • 举报
回复
new了多大内存?32位程序用户地址空间只有2G,再加上碎片问题,到800M时,申请一块256M内存失败是很正常的事情。
duyanbin_sy 2013-04-23
  • 打赏
  • 举报
回复
引用 9 楼 lostying 的回复:
引用 7 楼 duyanbin_sy 的回复:引用 4 楼 lostying 的回复:你是如何判定是在new后崩溃的,如果你是挂着调试器在跑的,并且是debug版本,直接去下载系统库的pdb文件,有助你分析具体的原因,可能是堆被破坏,再次new时检查到堆错误然后产生异常. 这个怎么用能说的详细些吗 如果是挂着调试器跑的话,设置VS->工具->选项->调试->符号,把h……
好的,谢谢,我试试
无言猪 2013-04-23
  • 打赏
  • 举报
回复
引用 7 楼 duyanbin_sy 的回复:
引用 4 楼 lostying 的回复:你是如何判定是在new后崩溃的,如果你是挂着调试器在跑的,并且是debug版本,直接去下载系统库的pdb文件,有助你分析具体的原因,可能是堆被破坏,再次new时检查到堆错误然后产生异常. 这个怎么用能说的详细些吗
如果是挂着调试器跑的话,设置VS->工具->选项->调试->符号,把http://msdl.microsoft.com/download/symbols添加进去,然后在异常时看看具体的栈.
zgl7903 2013-04-23
  • 打赏
  • 举报
回复
内存的使用情况还要关注虚拟内存的 1 如果有内存泄漏, 程序Debug模式运行一两小时(奔溃前)退出,一般调试输出会有内存泄漏情况的信息输出,开启DEBUG_NEW宏,有助于快速定位 2 优化存储结构,如使用其它数据结构,如不是当前用到的可以缓存到后台(如硬盘),以降低系统内存的使用量
duyanbin_sy 2013-04-23
  • 打赏
  • 举报
回复
引用 4 楼 lostying 的回复:
你是如何判定是在new后崩溃的,如果你是挂着调试器在跑的,并且是debug版本,直接去下载系统库的pdb文件,有助你分析具体的原因,可能是堆被破坏,再次new时检查到堆错误然后产生异常.
这个怎么用能说的详细些吗
duyanbin_sy 2013-04-23
  • 打赏
  • 举报
回复
用了map存数据,系统关闭才释放,但是用map没问题,我单独测试过。运行了一天没崩溃。 但是把vector存数据的代码打开就崩溃了。
duyanbin_sy 2013-04-23
  • 打赏
  • 举报
回复
呵呵这么多回复。 之前确实用过vector,用了很多vector保存数据,vector添加后,再删除数据,内存不释放。 但后来改成自己申请释放内存,也是崩溃。
无言猪 2013-04-23
  • 打赏
  • 举报
回复
你是如何判定是在new后崩溃的,如果你是挂着调试器在跑的,并且是debug版本,直接去下载系统库的pdb文件,有助你分析具体的原因,可能是堆被破坏,再次new时检查到堆错误然后产生异常.
傻X 2013-04-23
  • 打赏
  • 举报
回复
内存碎片吧。我之前也碰到过 你用了STL的Map和list么?多线程记得要释放
Swspeed 2013-04-23
  • 打赏
  • 举报
回复
单步调试,查看那个new的对象哪里有问题,然后再解决!
向立天 2013-04-23
  • 打赏
  • 举报
回复
有可能是内核资源泄露 看看各种句柄的数量情况

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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