debug 版本出错,而release不出错,严重异常,请教怎么解决
debug 版本出错,而release不出错,严重错误,请问如何解决?
在 new 和 realloc 时失败,申请相同的内存,debug版本失败了,而release版本没问题,请问,有没有什么办法解决呢?
当时电脑上总的内存使用量是50%左右。
------解决思路----------------------
new 的时候 catch bad_alloc 看看能不能抓到,然后看异常里说什么。
------解决思路----------------------
2G给用户态(用户进程,dll代码也算在这里,你自己看下函数地址就知道是在0x8000000以下还是以上了),2G给内核。
当然你可以给windows开启3G用户态,1G内核的模式,这里就不讨论了。不然改成64位系统,空间更多了。
你可以使用内存文件映射或其他方式(简单地就是不用了delete,用到了再new)把暂时不用的变量从逻辑内存移出去,用时再加载回来。
------解决思路----------------------
听你的意思是有异常,只不过 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不出错这个是完全可能的,细节比较多。不贴完整代码的话,可能没办法帮你直接定位到根本问题,只能建议你多看下细节了。
在 new 和 realloc 时失败,申请相同的内存,debug版本失败了,而release版本没问题,请问,有没有什么办法解决呢?
当时电脑上总的内存使用量是50%左右。
------解决思路----------------------
new 的时候 catch bad_alloc 看看能不能抓到,然后看异常里说什么。
------解决思路----------------------
2G给用户态(用户进程,dll代码也算在这里,你自己看下函数地址就知道是在0x8000000以下还是以上了),2G给内核。
当然你可以给windows开启3G用户态,1G内核的模式,这里就不讨论了。不然改成64位系统,空间更多了。
你可以使用内存文件映射或其他方式(简单地就是不用了delete,用到了再new)把暂时不用的变量从逻辑内存移出去,用时再加载回来。
------解决思路----------------------
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不出错这个是完全可能的,细节比较多。不贴完整代码的话,可能没办法帮你直接定位到根本问题,只能建议你多看下细节了。