C/Visual C - EJECUTAR RELEASE

   
Vista:

EJECUTAR RELEASE

Publicado por ROCIO (6 intervenciones) el 06/09/2007 20:10:29
Hola,

Hace varios días puse una nota titulada "PROBLEMAS AL LEER FICHEROS". Ahora he descubierto que el problema no es al leer los ficheros, sino al ejecutar la aplicación en modo release, Creo que se producen fallos de asignación de memoria, porque en algunas estructuras, concretamente arrays y en determinadas variables, aparecen valores basura. Sin embargo, en modo debug funciona correctamente y los valores que se leen del fichero se cargan correctamente, pues he hecho que se representen en pantalla y aparecen bien. Utilizo Visual C++. ¿Sabe alguien por qué ocurre esto? ¿Cómo podría solucionarlo?

MUCHAS GRACIAS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:EJECUTAR RELEASE

Publicado por fernando.gomez (1604 intervenciones) el 06/09/2007 23:09:58
Ocurre por ese hermoso concepto que rara vez se enseña en las escuelas: el comportamiento indefinido. Tu código está haciendo algún error en algún momento. Si en debug funciona pero no en release, entonces tu código está mal. Esto es porque muchas veces los depuradores añaden información adicional para poder depurar. Un ejemplo clásico en Visual C++ es el siguiente:

wchar_t* sz = L"Hola";
wcscpy(sz, L"Hola mundo!");

Evidentemente el código anterior genera un comportamiento indefinido, que usualmente se traducirá en un acceso a memoria inválida. Pero el depurador suele añadir más memoria de la que necesita, así en lugar de crearte un búfer de cinco caracteres, te la creará de --digamos-- veinte. Entonces en modo de depuración es posible que esto no falle, o mejor dicho, no habrá un acceso a memoria inválida. Pero en modo release esto sí puede pasar, ya que ahora sí inicializará el búfer a cinco caracteres.

Así que te recomiendo que revises, revises y revises.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:EJECUTAR RELEASE

Publicado por Nelek (818 intervenciones) el 12/09/2007 09:48:12
Como ya dije abajo y te ha dicho fernando aqui...

Revisa que todas las inicializaciones estan a valores nulos, que se crea todo del tamanyo que toca, que despues de usar destruyes todos los objetos/punteros que todas las funciones devuelvan un valor acorde a su declaracion, que...

el modo release es muy molesto porque el compilador hace UNICA y EXCLUSIVAMENTE lo que esta programado, sin tener ayudas ni anyadir codigo por si mismo como en el modo debug.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar