Определение _CRT_SECURE_NO_WARNINGS приведет к сбою в векторном деструкторе - PullRequest
3 голосов
/ 19 августа 2011

Я работаю с устаревшим кодом, портированным с Visual C ++ 6.0 на VC ++ 9.0 (2008).Я отключил предупреждения безопасного CRT, используя _CRT_SECURE_NO_WARNINGS определение препроцессора.Но это привело к сбоям в деструкторе std::vector.

Есть проблемы с использованием _CRT_SECURE_NO_WARNINGS?

Ответы [ 3 ]

1 голос
/ 19 августа 2011

Как происходит сбой?Это больше похоже на то, что у вас есть память в одном месте, она перезаписывает память в вашем векторе, а затем освобождает ее до освобождения вашего вектора.Я бы посмотрел в любое место с указателями.Поскольку вы сейчас используете совместимый со стандартами компилятор, замените их на общие указатели boost или массивы boost.Все, что устраняет необходимость в арифметике указателей, где итератор будет безопаснее использовать.

1 голос
/ 20 августа 2011

Вы определенно один из тех, кому нужно быстрое и грязное решение, чтобы просто «заставить его работать» каким-либо образом.Плохой подход.Не определяйте директиву, чтобы скрыть предупреждения, вместо этого включите ВСЕ предупреждения (уровень 4 - /W4) в вашем коде и старательно удалите все из них.Сделайте ваш код более надежным, удалив все возможные предупреждения и побочные эффекты, вызванные ими.

Существует огромная разница между VC6 и последними компиляторами VC - то, что безупречно работало в VC6, может не работать сейчас, и это не ошибка последнего компилятора, а ошибка вашего кода.Компилятор / отладчик помогает быстро найти ошибку (на стадии разработки / отладки).

Я бы также предложил вам выполнить некоторый статический анализ (например, анализ кода в более поздней версии Visual Studio с использованием переключателя /analyze, если у вас есть).Вы также должны запустить динамический анализ кода для обнаружения других проблем.

1 голос
/ 19 августа 2011

Это не связанные проблемы._CRT_SECURE_NO_WARNINGS только подавляет предупреждения об устаревании, но не меняет поведение программы.Вы должны отладить реальную проблему.

...