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