У меня возникла странная проблема. Версия моего приложения Release
работает нормально, но недавно, когда я переключился на версию Debug
, я сразу же получил право на нарушение при запуске. Нарушение доступа происходит, когда освобожден блок выделенной памяти. Все это происходит в конструкторе для статической переменной.Очень странное поведение в новом/бесплатном
Я считаю, что проблема не возникает в версии Release
просто потому, что я определил NDEBUG
там, что, я считаю, отключает утверждения в среде выполнения C.
Я смог немного сузить дело. Если добавить следующий код в конструкторе перед обычными вызовами, то я получаю ту же ошибку:
int *temp = new int[3];
delete[] temp;
Это заставляет меня думать, что что-то за пределами этого блока кода вызывает проблемы, например, может быть, есть проблема с тем, как связана среда выполнения C. Тем не менее, я не могу сказать, какова может быть эта проблема, и после того, как я задумался над проблемой, у меня заканчиваются идеи о том, где можно ткнуть дальше.
Любая помощь была бы принята с благодарностью. Я использую Visual Studio 2010 для компиляции приложения и запуска Windows 7.
Большое спасибо!
Две строки кода, который вы написали, являются законными и совершенно точными. Должно быть что-то конкретное для вашего кода. Если он достаточно мал, чтобы сделать это, вы могли бы опубликовать [mcve] (https://stackoverflow.com/help/mcve)? – CoryKramer
Глобальные статические переменные со сложными конструкторами задают проблемы. Посмотрите на одиночные игры. –
Возможно, вы захотите попробовать использовать pageheap, чтобы узнать, возникают ли проблемы в вашей версии сборки. –