MFC:基于char的广泛CMap使程序崩溃

时间:2015-08-27 16:58:00

标签: c++ dictionary mfc

得到一个关于一个非常简单但显然令人难以置信的复杂事情的问题 - 来自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结合使用(即,这种leathal组合不允许我跟踪MFC源代码,因此我乍一看可能非常不必要的问题道歉。)

非常感谢您的回复。

托马斯

2 个答案:

答案 0 :(得分:1)

因此,您使用VC-Express 2010编译代码并从VC6链接到MFC Libs,并且这一切都与共享DLL中的MFC一起使用。

可能是您的EXE代码链接到VC 2010的CRT运行时.VC6 MFC的DLL代码将使用VC6运行时CRT DLL。

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

请检查您的程序是否加载了什么CRT DLL以及VC6使用了什么CRT。

只需进入汇编程序代码并对其进行调试,即可查看所涉及的模块。

答案 1 :(得分:0)

不是将VC-Express与旧的MFC VC6混合使用,而是使用新的Vs 2015 Community Edition会更容易。它对小公司是免费的(检查最终用户许可证),您是否允许使用MFC。

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