由于没有运算符的 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 ## .

所以现在看来​​我有两个可能的原因:

  1. 连接出错(问题:将两个 CString 对象简单地一个接一个地连接在一行源代码中是否正确?)。
  2. 拼接的结果很好,但是我不能放到result变量中,原因是:

    2.1。处理 CString 变量的错误方法。

    2.2。一个内存问题,与这一行特定的源代码无关(但为什么我的应用程序会一直在这一行崩溃?)。

请注意,我的应用程序是多线程的。

谁能告诉我我的应用程序出了什么问题?

第一条评论后编辑:
来源似乎是正确的,这可能表明堆损坏,但我不知道如何调查堆。有人对此有任何线索吗?

我找到了问题的"cause":为了解决之前的一个问题,我启用了我电脑的所有gflags,但后来我忘记禁用它们了。

我现在已经禁用了所有的 gflags,现在问题不再出现了:
启动"Application Verifier",配置如下: