You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:30:42