遇到一个奇怪问题,ATL做了一个控件,头文件是使用atlstr.h.
程序在声明CString变量时崩溃。 开始怀疑是ATL的CString类有问题,试了一下用WTL的CString发现没有崩溃。
虽然没有抛出异常,但是只能说明WTL的CString在异常处理方面做的稍好,不过问题肯定还是存在的。
经过检查,确定问题在某一段代码操作字符串时产生堆栈溢出了。往上查了几段代码,锁定在这里:
TCHAR szBuff[MAX_PATH];
CString szUrl;
................................
wsprintf( szBuff, szUrl );
注释掉wsprintf这一行,程序运行正常!问题就出在这。wsprintf格式化读入CString时破坏了堆栈!
至于wsprintf为什么会出现这种现象,暂时没时间去跟踪了,先放一放,有空再跟吧。。。
本文探讨了一个关于wsprintf函数引发的堆栈溢出问题,具体表现为当使用wsprintf格式化读取CString对象时,程序崩溃。通过逐步排查定位到wsprintf为问题根源,并提供了禁用该行代码后程序恢复正常运行的现象。
421

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



