Распространенные проблемы, возникающие при создании построений выпуска
В процессе разработки обычно выполняется построение и тестирование отладочного построения проекта.При последующем построении сборки выпуска могут возникать ошибки нарушения прав доступа.
В этом разделе приведены основные различия между построениями отладки и выпуска.В этом списке приведены только основные различия, которые могут привести к сбою построения выпуска приложения, в построении отладки которого отсутствовали ошибки.
Размещение в куче
Компиляция
Поддержка указателей
Оптимизация
Дополнительные сведения о порядке перехвата ошибок построения выпуска в сборке построения см. в описании параметра компилятора /GZ (перехват ошибок сборки выпуска в сборке построения).
Размещение в куче
В 90 процентах случаев проблемы сборки выпуска приложения, работающего без ошибок в сборке отладки, связаны с размещением в куче.
При построении проекта для отладки используется механизм распределения памяти для отладки.В этом случае все операции выделения памяти заключаются в охранные байты.Охранные байты используются для обнаружения перезаписи памяти.В построениях отладки и выпуска применяются разные механизмы размещения в куче. В связи с этим операция перезаписи памяти, не вызывающая ошибок в сборке отладки, может привести к неустранимым последствиям в сборке выпуска.
Дополнительные сведения см. в разделах Проверка перезаписи памяти и Проверка перезаписи памяти в отладочном построении.
Компиляция
При построении сборки выпуска изменяется большинство макросов и реализаций библиотеки MFC.В частности, в построении выпуска макрос ASSERT возвращает пустое значение, в связи с чем содержащийся в нем код не выполняется.Дополнительные сведения см. в разделе Проверка операторов ASSERT.
В целях повышения производительности некоторые функции определяются в построении выпуска как встроенные.В построениях выпуска обычно используется оптимизация.Также в них используется другой механизм распределения памяти.
Поддержка указателей
В связи с отсутствием сведений об отладке из приложения удаляется заполнение.В сборке выпуска существует высокая вероятность наличия свободных указателей, которые указывают на неинициализированную область памяти, а не сведения об отладке.
Оптимизация
В процессе оптимизации некоторых сегментов кода компилятор может добавлять непредвиденный код.Вероятность возникновения ошибок в построении выпуска при этом незначительна, однако на такие случаи следует обращать внимание.Сведения о способах устранения см. в разделе Оптимизация кода.