MFC:基于宽字符的CMap使程序崩溃

MFC: wide char-based CMap makes program crash

本文关键字:CMap 程序 崩溃 字符 于宽 MFC      更新时间:2023-10-16

有一个关于一个非常简单但显然令人难以置信的复杂的事情的问题-从MFC自定义数据CMap。

typedef CMap<PWCHAR,PWCHAR,PWCHAR,PWCHAR> TMyMap;
TMyMap m;
// the following causes a crash once "m" gets out of scope
m[L"xxx"]=L"yyy";
// the following causes a crash immediately (which is probably reasonable)
m[NULL]=NULL;

使用VS2010Express与遗留的MFC6(即,这种致命的组合不允许我跟踪MFC源代码,因此我为第一眼可能非常不必要的问题道歉)。

非常感谢您的回复。

托马斯

所以你用VC-Express 2010编译代码,并从VC6链接到MFC库,这一切都与MFC在一个共享的DLL。

可能是你的EXE代码链接到vc2010的CRT运行时。其中VC6 MFC的DLL代码将使用VC6运行时CRT的DLL。

所以在MFC代码中执行new/malloc/delete/free,你的代码总是针对不同的堆,这一定会崩溃。

请根据您的程序加载的CRT DLL和VC6使用的CRT来检查。

只要进入汇编代码并调试它,看看涉及到哪些模块。

与其将VC-Express与旧的MFC VC6混合使用,不如使用新的Vs 2015社区版。它对小公司是免费的(检查最终用户许可证),你是否允许使用MFC。

可能这是一种更稳定的方法来解决这种"混合"问题。