Сбой программы только в режиме Release вне отладчика
У меня довольно массивная программа (> 10 тысяч строк кода на C ++). Он отлично работает в режиме отладки или в режиме выпуска при запуске из Visual Studio, но двоичный файл в режиме выпуска обычно дает сбой при запуске вручную из командной строки (не всегда !!!).
Строка с delete вызывает сбой:
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». Невозможно определить место ошибки, хотя «Ни один символ не был загружен ни для одного стекового кадра».
Я предполагаю, что это довольно серьезный случай повреждения кучи, но как это отладить? Что я должен искать?
Спасибо за помощь.