Problemas comunes al crear versiones de lanzamiento
Durante la fase de desarrollo, normalmente, se compila y se prueba con una versión de depuración del proyecto.En ese caso, si la aplicación se compila para una versión de lanzamiento, se puede producir una infracción de acceso.
La siguiente lista muestra las diferencias principales entre una versión de depuración y una de lanzamiento.Existen otras diferencias; sin embargo, a continuación, se indican las diferencias principales que producirían un error en una aplicación compilada para una versión de lanzamiento que funciona en una versión de depuración.
Disposición del montón
Compilación
Utilización de punteros
Optimizaciones
Vea la opción /GZ (Detectar errores de compilación de lanzamiento en compilaciones de depuración) del compilador para obtener información sobre cómo detectar errores de compilación de lanzamiento en compilaciones de depuración.
Disposición del montón
La disposición del montón es la causa de cerca de un noventa por ciento de los problemas de una aplicación que funciona correctamente en modo de depuración pero no en su versión de lanzamiento.
Cuando el proyecto se compila para depuración, se utiliza el asignador de memoria de depuración.Esto significa que todas las asignaciones de memoria disponen de bytes de protección asociados.Estos bytes de protección detectan cualquier sobrescritura en memoria.Como la disposición del montón difiere entre las versiones de lanzamiento y de depuración, una sobrescritura en memoria podría no producir ningún problema en una versión de depuración, pero podría tener efectos catastróficos en una versión de lanzamiento.
Para obtener más información, vea Comprobar si se ha sobrescrito la memoria y Utilizar la versión de depuración para comprobar si se ha sobrescrito la memoria.
Compilación
Muchas de las macros de MFC y gran parte de la implementación de MFC cambian cuando se compila una versión de lanzamiento.En particular, la macro ASSERT no se evalúa en una versión de lanzamiento, de modo que no se ejecuta el código incluido en instrucciones ASSERT.Para obtener más información, vea Examinar instrucciones ASSERT.
Algunas funciones se implementan inline para incrementar la velocidad en la versión de lanzamiento.Normalmente, las optimizaciones se activan en las versiones de lanzamiento.Además, se utiliza un asignador de memoria diferente.
Utilización de punteros
La ausencia de información de depuración quita los datos de relleno de la aplicación.En una versión de lanzamiento, los punteros perdidos tienen una gran probabilidad de apuntar a memoria sin inicializar en vez de apuntar a información de depuración.
Optimizaciones
Según la naturaleza de ciertos segmentos de código, el compilador de optimización podría generar código no esperado.Ésta es la causa menos probable de problemas en versiones de lanzamiento, pero ocurre en ocasiones.Para obtener una solución, vea Optimizar el código.