Сбой программы только в режиме 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». Невозможно определить место ошибки, хотя «Ни один символ не был загружен ни для одного стекового кадра».

Я предполагаю, что это довольно серьезный случай повреждения кучи, но как это отладить? Что я должен искать?

Спасибо за помощь.

Ответы на вопрос(9)

Ваш ответ на вопрос