Мое приложение падает на следующую строку исходного кода:
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 ##
.
Так что теперь, похоже, яЕсть две возможные причины:
- Конкатенация идет не так (вопрос: правильно ли объединять два
CString
объекта, просто помещая их один за другим в одну строку исходного кода?). Результат конкатенации хорош, но я не могу поместить его в переменную результата, которая вызвана:
2.1.Неправильный способ обработки переменной CString
.
2.2.Проблема с памятью, которая не имеет ничего общего с этой конкретной строкой исходного кода (но почему мое приложение продолжает зависать именно в этой строке?).
Для вашей информации, мое приложениеявляется многопоточным.
Может кто-нибудь сказать мне, что идет не так в моем приложении?
Редактировать после первых комментариев:
Источник, кажется, правильно, чтоможет указывать на повреждение кучи, но я понятия не имею, как исследовать кучу.У кого-нибудь есть какие-либо подсказки по этому вопросу?