c++ - 由于没有运算符的 CString 连接(?)导致的 MemoryException

标签 c++ visual-studio memory-management crash c-strings

我的应用程序在以下源代码行崩溃:

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

我尝试做一些分析,尝试使用即时窗口,但这无法识别 _T() 运算符,也无法识别其同义词 __T()L ##

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

  1. 连接出错(问题:连接两个 CString 对象是否正确,只需将它们一个接一个地放在一行源代码中?)。
  2. 拼接的结果很好,但我无法将其放入结果变量中,这是由于:

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

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

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

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

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

最佳答案

我找到了问题的“原因”:为了解决之前的问题,我启用了计算机的所有 gflags,但后来忘记禁用它们。

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

enter image description here

关于c++ - 由于没有运算符的 CString 连接(?)导致的 MemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52964560/

相关文章:

visual-studio - 获取当前插件用户的用户名

visual-studio - 我可以在安装 Visual Studio 2008 的同时或之后安装 VS Studio Express 吗?

c# - 全新 ASP.NET Core 2.1 项目的构建时间缓慢

c++ - 是否有可能实现一个与数组而不是单个对象一起工作的内存池?

c++ - 如何在 Cocoa 项目中包含 <cstring>

.net - 将非托管 C++ 与 F# 混合用于物理 : worth it?

c++ - 将不同的 std::tuple 类型存储在数组、 vector 或?

c++ - 将字符串和整数散列在一起?

c - 分配内存中的空白空间会发生什么?

memory-management - 为什么堆栈地址会朝着减少内存地址的方向增长?