MFC发布版InitInstance中this指针被pugixml破坏致启动崩溃
我有一个x64架构的MFC应用(基于VS2019,由向导创建并整合大量旧项目代码),Debug构建可正常运行,但Release构建启动时出现问题。该项目规模较大,包含多个子项目与库。
在AfxMainWin()函数中,pThread与pApp指针创建正常,可查看命令行参数pThread->m_lpCmdLine。但当AfxMainWin调用pThread->InitInstance()后,InitInstance函数内的this指针损坏,导致访问m_lpCmdLine或其他成员变量时崩溃。
EDIT1:初步排查结果
经排查,InitInstance第一行时this指针正常,执行一个读取XML配置的初始化函数后指针损坏,问题出在以下代码:
status = ((pugi::xml_document*)get_params())->load_file(file).status;
初步推测是pugixml.dll与Release构建不兼容导致内存损坏,通过Dependency Walker发现该DLL为Debug版本,依赖VCRUNTIME140D.DLL等Debug版MFC库,不适用于Release构建。
由于无可用的Release版pugixml.dll,计划移除该DLL并将pugixml.cpp纳入项目,或更换XML解析库。
最后请教:内存损坏最可能的原因是什么?是Debug版DLL与Release构建不兼容?还是DLL基于v140工具集,而项目用v142?亦或是C风格指针转换导致栈被破坏?注:get_params()返回void*指针,该指针由the_params = new pugi::xml_document;创建,转换类型正确。
EDIT2:后续处理
替换pugixml.dll为pugixml.cpp后可调试,发现是其他pugixml相关问题,已另行提问。
内容的提问来源于stack exchange,提问作者Forrest

