2012-11-19 15:38 vs2010MFC工程,遇到的堆已损坏的崩溃。产生可能性,以及解决方案
0:开发环境,windows7+vs2010 1:程序F5调试模式,Debug/Release下会导致崩溃。 但直接运行Ctrl+F5就没有问题。
2: 2.1提示如下信息: Windows 已在 CDCDiagnoser.exe 中触发一个断点。 其原因可能是堆被损坏,这说明 CDCDiagnoser.exe 中或它所加载的任何 DLL 中有 Bug。 原因也可能是用户在 CDCDiagnoser.exe 具有焦点时按下了 F12。 输出窗口可能提供了更多诊断信息。 2.2点击继续后提示如下信息: CDCDiagnoser.exe 中的 0x7755380b 处有未经处理的异常: 0xC0000374: 堆已损坏。
3 产生可能性,即解决方案:
3.1:最大可能为内存访问越界。
3.2:调用第三方dll文件,我使用了iphdrapi.dll,中的一个方法,次方法是微软未公开的。导致了对破坏。
注掉后,未出现问题。且仅仅在Debug/Releas的调试模式下会出现。而直接运行没有问题,可能是
还没有出发,但直接运行,概率很小,没有发现。但~不得不用这个方法。寻找其他方法解决之。
3.3: 静态库也可能引起,如下描述
main中使用std::vector<class A*> list;
静态库中是list增大。会出现,也可能是静态库中调用其他库的原因。有待确定。
3.4:如果程序总有递归方法,递归得太深的话,同样也会造成堆栈破坏。
4:总结。
windows静态,动态库数接口,仅仅使用基本类型数据结构来通信。这样可以避免一些不必要的错误。

浙公网安备 33010602011771号