debug 版本出错,而release不出错,严重异常,请教怎么解决

debug 版本出错,而release不出错,严重错误,请问如何解决?
在 new 和 realloc 时失败,申请相同的内存,debug版本失败了,而release版本没问题,请问,有没有什么办法解决呢?
当时电脑上总的内存使用量是50%左右。
------解决思路----------------------
new 的时候 catch bad_alloc 看看能不能抓到,然后看异常里说什么。
------解决思路----------------------
引用:
Quote: 引用:

32位windows,用户态的2G不是全给变量的,里面还有代码段,栈空间等。能new的,最多1.5,1.6G左右吧。
debug下,变量会需要些额外的空间。

基本上,如果debug下20字节都申请不到了,你的release版本也危险了。
你的程序为什么要花这么多内存?这些花费都是必需的么?


32位的windows,每个进程只能有2G的内存?理论不是4G的么?

2G给用户态(用户进程,dll代码也算在这里,你自己看下函数地址就知道是在0x8000000以下还是以上了),2G给内核。
当然你可以给windows开启3G用户态,1G内核的模式,这里就不讨论了。不然改成64位系统,空间更多了。

你可以使用内存文件映射或其他方式(简单地就是不用了delete,用到了再new)把暂时不用的变量从逻辑内存移出去,用时再加载回来。

------解决思路----------------------
引用:
Quote: 引用:

new 的时候 catch bad_alloc 看看能不能抓到,然后看异常里说什么。


异常没catch到。
我删除了catch(...)部分,抛出异常时,查看“调用堆栈”,发现,最后一处是:

听你的意思是有异常,只不过 catch bad_alloc 抓不到该异常。那基本可以肯定不是内存分配失败造成的,因为标准要求 new 表达式因内存分配原因失败的时候必须扔 catch bad_alloc 能捕获的异常,这跟 debug 还是 release 无关。

建议你还是查查代码中的其它错误吧,保不齐是构造函数挂了什么的。说实在这年头使用 1G 内存真不算什么,即便你是 32 位并且物理内存也不大,系统也会使用虚拟内存,无非就是慢点,也不至于申请个 1k 或者 1m 的内存就直接异常了。
------解决思路----------------------
release下能流畅运行不说明没有问题,只是问题的影响程度而已。debug版本和release版本编译器生成的代码完全不同,主要是有更多的保护来帮助调测时能及早的发现问题。可以百度看下debug和release的区别,我blog里面也有,可以看看。

你这个问题我觉得一个是new和realloc混用是有关系的,不知道你的调试是不是mfc,new有没有被重定义,new的heap和realloc的heap在debug版本时,是不是同一个heap,先分配的内存有没有越界,导致后续的内存分配申请在debug版报错,release不出错这个是完全可能的,细节比较多。不贴完整代码的话,可能没办法帮你直接定位到根本问题,只能建议你多看下细节了。