MemoryException из-за конкатенации CString (?) Без оператора - PullRequest
0 голосов
/ 24 октября 2018

Мое приложение падает на следующую строку исходного кода:

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.Проблема с памятью, которая не имеет ничего общего с этой конкретной строкой исходного кода (но почему мое приложение продолжает зависать именно в этой строке?).

Для вашей информации, мое приложениеявляется многопоточным.

Может кто-нибудь сказать мне, что идет не так в моем приложении?

Редактировать после первых комментариев:
Источник, кажется, правильно, чтоможет указывать на повреждение кучи, но я понятия не имею, как исследовать кучу.У кого-нибудь есть какие-либо подсказки по этому вопросу?

1 Ответ

0 голосов
/ 26 октября 2018

Я нашел «причину» проблемы: чтобы решить предыдущую проблему, я включил все gflags моего компьютера, но потом забыл отключить их.

I 'Теперь мы отключили все gflags, и теперь проблема больше не возникает:
Lanuch "Application Verifier" и настройте его следующим образом:

enter image description here

...