由于没有操作符的CString串联(?),导致MemoryException

时间:2018-10-24 08:44:13

标签: 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对象一个接一个地放置,是否正确地连接了两个CString对象?)
  2. 连接的结果很好,但是我不能将其放在结果变量中,该变量是由以下原因引起的:

    2.1。处理 paymentIDArray.forEach(item => { let p = rp({ uri: API + item.transactionID, headers: { "Content-Type": "application/json", "Authorization": "Basic " + authCode }, simple: false, resolveWithFullResponse: false, transform2xxOnly: false }).promise(); promises.push(p); }); await Promise .all(promises) .each(async (inspection) => { if (inspection.isFulfilled()) { // I want item.transactionID of each promise here let result = JSON.parse(inspection.value()); } else { logger.error(inspection); logger.error("A promise in the array was rejected with", inspection.reason()); } }); 变量的错误方法。

    2.2。内存问题,与这行特定的源代码无关(但是为什么我的应用程序然后继续在该行上完全崩溃?)。

为您提供信息,我的应用程序是多线程的。

有人可以告诉我我的应用程序出了什么问题吗?

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

1 个答案:

答案 0 :(得分:0)

我发现了问题的“原因”:为了解决先前的问题,我启用了计算机的所有gflag,但后来却忘记禁用它们。

我现在已禁用所有gflag,现在不再出现此问题:
Lanuch“应用程序验证程序”,并进行如下配置:

enter image description here