free开释内存失败-在静态库中使用mfc
free释放内存失败-在静态库中使用mfc
malloc分配内存,使用后用free释放。原来一切顺利。但是为了能够在无环境的电脑上运行,修改项目属性,使用 在静态库中使用mfc 。然后,问题来了……
求大神相助!
或者求可以不改库,把DEBUG文件夹下的内容拷贝到其他电脑上即可运行的方法。
HEAP[PR9000GUI.exe]: Invalid Address specified to RtlValidateHeap( 01100000, 00BA2C40 )
Windows 已在 PR9000GUI.exe 中触发一个断点。
其原因可能是堆被损坏,这说明 PR9000GUI.exe 中或它所加载的任何 DLL 中有 Bug。
原因也可能是用户在 PR9000GUI.exe 具有焦点时按下了 F12。
输出窗口可能提供了更多诊断信息。
------解决方案--------------------
如果只有1个exe,然后选择在静态库中使用MFC,理论上是不会出现这种问题,但是如果有多个模块,比如有dll,然后在dll中malloc,exe中free,并且dll或者exe至少有1个选择在静态库中使用MFC,那么就会出问题,如果2者都选择以共享方式使用MFC就不会有问题。
规范一点的做法是不要跨模块释放,比如在dll中malloc了,那dll就应该再导出一个函数来free掉malloc返回的指针。
malloc分配内存,使用后用free释放。原来一切顺利。但是为了能够在无环境的电脑上运行,修改项目属性,使用 在静态库中使用mfc 。然后,问题来了……
求大神相助!
或者求可以不改库,把DEBUG文件夹下的内容拷贝到其他电脑上即可运行的方法。
HEAP[PR9000GUI.exe]: Invalid Address specified to RtlValidateHeap( 01100000, 00BA2C40 )
Windows 已在 PR9000GUI.exe 中触发一个断点。
其原因可能是堆被损坏,这说明 PR9000GUI.exe 中或它所加载的任何 DLL 中有 Bug。
原因也可能是用户在 PR9000GUI.exe 具有焦点时按下了 F12。
输出窗口可能提供了更多诊断信息。
------解决方案--------------------
如果只有1个exe,然后选择在静态库中使用MFC,理论上是不会出现这种问题,但是如果有多个模块,比如有dll,然后在dll中malloc,exe中free,并且dll或者exe至少有1个选择在静态库中使用MFC,那么就会出问题,如果2者都选择以共享方式使用MFC就不会有问题。
规范一点的做法是不要跨模块释放,比如在dll中malloc了,那dll就应该再导出一个函数来free掉malloc返回的指针。