У меня довольно массивная программа (> 10 тысяч строк кода на C ++). Он отлично работает в режиме отладки или в режиме выпуска при запуске из Visual Studio, но двоичный файл режима выпуска обычно происходит сбой при запуске вручную из командной строки (не всегда !!!).
Строка с удалением вызывает сбой:
bool Save(const short* data, unsigned int width, unsigned int height,
const wstring* implicit_path, const wstring* name = NULL,
bool enable_overlay = false)
{
char* buf = new char[17];
delete [] buf;
}
РЕДАКТИРОВАТЬ: По запросу расширен пример.
"len" имеет длину 16 в моем тестовом случае. Неважно, если я что-то делаю с buf или нет, при удалении происходит сбой.
РЕДАКТИРОВАТЬ: приложение работает нормально без строки delete [], но я полагаю, что это приводит к утечке памяти (так как блок никогда не выделяется). Буф никогда не используется после строки удаления. Также кажется, что он не падает с любым другим типом, кроме char. Теперь я в замешательстве.
Сообщение о сбое является очень неопределенным (типичная Windows "xyz.exe перестал работать"). Когда я нажимаю опцию «Отладить программу», она входит в VS, где указывается ошибка «Место записи нарушения доступа xxxxxxxx». Невозможно определить место ошибки, хотя «Ни один символ не был загружен ни для одного стекового кадра».
Полагаю, это довольно серьезный случай повреждения кучи, но как это отладить? Что я должен искать?
Спасибо за помощь.