由于没有运算符的 CString 连接(?)导致的 MemoryException
MemoryException due to CString concatenation (?) without operator
我的应用程序在以下源代码行崩溃:
CString path;
path = CACHE_DIR _T("Local\Alarm\current.tmp");
其中:
#define CACHE_DIR _T("C:\<somewhere>\System Cache\")
调用堆栈提到以下代码行:
mfc140u.dll!ATL::CSimpleStringT<wchar_t,1>::operator=(const wchar_t * pszSrc) Line 317
我尝试做一些分析,尝试使用立即数 window,但这无法识别 _T()
运算符,也无法识别其同义词 __T()
或 L ##
.
所以现在看来我有两个可能的原因:
- 连接出错(问题:将两个
CString
对象简单地一个接一个地连接在一行源代码中是否正确?)。
拼接的结果很好,但是我不能放到result变量中,原因是:
2.1。处理 CString
变量的错误方法。
2.2。一个内存问题,与这一行特定的源代码无关(但为什么我的应用程序会一直在这一行崩溃?)。
请注意,我的应用程序是多线程的。
谁能告诉我我的应用程序出了什么问题?
第一条评论后编辑:
来源似乎是正确的,这可能表明堆损坏,但我不知道如何调查堆。有人对此有任何线索吗?
我找到了问题的"cause":为了解决之前的一个问题,我启用了我电脑的所有gflags,但后来我忘记禁用它们了。
我现在已经禁用了所有的 gflags,现在问题不再出现了:
启动"Application Verifier",配置如下:
我的应用程序在以下源代码行崩溃:
CString path;
path = CACHE_DIR _T("Local\Alarm\current.tmp");
其中:
#define CACHE_DIR _T("C:\<somewhere>\System Cache\")
调用堆栈提到以下代码行:
mfc140u.dll!ATL::CSimpleStringT<wchar_t,1>::operator=(const wchar_t * pszSrc) Line 317
我尝试做一些分析,尝试使用立即数 window,但这无法识别 _T()
运算符,也无法识别其同义词 __T()
或 L ##
.
所以现在看来我有两个可能的原因:
- 连接出错(问题:将两个
CString
对象简单地一个接一个地连接在一行源代码中是否正确?)。 拼接的结果很好,但是我不能放到result变量中,原因是:
2.1。处理
CString
变量的错误方法。2.2。一个内存问题,与这一行特定的源代码无关(但为什么我的应用程序会一直在这一行崩溃?)。
请注意,我的应用程序是多线程的。
谁能告诉我我的应用程序出了什么问题?
第一条评论后编辑:
来源似乎是正确的,这可能表明堆损坏,但我不知道如何调查堆。有人对此有任何线索吗?
我找到了问题的"cause":为了解决之前的一个问题,我启用了我电脑的所有gflags,但后来我忘记禁用它们了。
我现在已经禁用了所有的 gflags,现在问题不再出现了:
启动"Application Verifier",配置如下: