项目实施时帮忙修改公司MFC老程序检索文件,测试同事表示测试个别文件时程序崩溃,但是在VS中跑时正常。
在无法复现的情况下, 先尝试弹窗定位,所有弹窗结束后程序才崩溃,定位失败。想到vs有类似GDB的Attach 功能,最后定位到Cstring析构时地址析构无效,而查找文件中只有一个Cstring 变量ss。
// 票头,简单注,复杂注记录总数
int nHeadCount;
int nBody1Count;
int nBody2Count;
//int nDebug[30];
int nDebug[40];
CString ss;
但是运行过程中,ss并未使用,也是单线程中使用,排除其他线程操作,故最有可能是nDebug 越界操作了。于是一个个查找nDebug的使用。
用的地方真不少,也确实有越界访问。修改扩大nDebug大小,问题解决!