项目实施时帮忙修改公司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大小,问题解决!
在修改MFC老程序检索文件功能时,遇到程序在特定文件下崩溃的问题。通过使用VS的Attach功能,最终定位到Cstring析构时地址无效,疑似nDebug数组越界导致。扩大nDebug数组大小后,问题得以解决。
6万+

被折叠的 条评论
为什么被折叠?



