duda sencilla con delete

duda sencilla con delete

de Hector Andres Gauna Marino -
Número de respuestas: 7

Hola, por que cuando hago delete no me esta liberando la memoria del puntero?

en este código sencillo pude ver que no me funciona como debería:

int* num = new int;

*num = 5;

delete num;

*num = 80;

me deja asignarle 80 y después consultarlo y confirmo que sigue ahí con printf.

gracias, saludos!

En respuesta a Hector Andres Gauna Marino

Re: duda sencilla con delete

de Harold Winston Quevedo Lopez -
Pasa que num tiene la direccion donde se encuentra el 5 en memoria, cuando haces delete num borras el 5 de memoria pero num sigue existiendo con la direccion de 5 podrias intentar ingresar a el despues de borrarlo y dara error porque el 5 ya no existe, es como demoler una casa, la direccion sigue existiendo pero hasta no ir no veras el terreno baldío.
Cuando haces *num = 80 cambias la dirección a donde a la maquina se le ocurra guardar el 80 xD
En respuesta a Hector Andres Gauna Marino

Re: duda sencilla con delete

de Carlos Luna -
Hola.
delete libera la memoria apuntada por un puntero si esta memoria fue asignada con new. Recordar que new obtiene memoria "fresca", que se puede acceder solo a través de un puntero ya que no es como una variable (de memoria estática) que cumple reglas de scope.
delete es una directiva para que el SO use esa memoria en el futuro (pasa a la categoría de memoria dinámica disponible, digamos), aunque la toma de esa memoria puede no ser inmediata.
Lo importante es que una vez que se libera la memoria, desde el programa no debería volver a accederse.
Saludos Carlos
En respuesta a Carlos Luna

Re: duda sencilla con delete

de Hector Andres Gauna Marino -
Hola, si, lo entiendo así y yo ya programé varias veces así. Esta materia la estoy recursando y cuando fui a ver ejercicios viejos que tenía, yo me había dejado comentado // creo que no la está liberando. Y efectivamente, hago delete de ese puntero, luego hago un printf para me dé error y me sigue mostrando el mismo dato. En ese código yo tenía un printf antes de hacer delete y después de hacer delete y me lo sigue mostrando. Llegue a pensar que capaz que el SO dejaba esa memoria disponible, pero la dejaba con ese dato hasta que se vuelva a utilizar por el sistema que la pida.
En respuesta a Hector Andres Gauna Marino

Re: duda sencilla con delete

de Hector Andres Gauna Marino -
En respuesta a Hector Andres Gauna Marino

Re: duda sencilla con delete

de Harold Winston Quevedo Lopez -
Segun lo que dijo el profesor el borrado es lo que se llama lazy o perezoso, no borra el dato en si, solo informa al sistema operativo de que el espacio de memoria esta libre para ser usado pero hasta no ser sobreescrito por el SO seguira alli, para evitar eso deberias agregar un num=NULL despues del delete, porque si ponele word al verlo disponible escribe en el ahi si habran datos raros ya no estara el 5. Asi lo entiendo yo al menos
En respuesta a Harold Winston Quevedo Lopez

Re: duda sencilla con delete

de Hector Andres Gauna Marino -
Por eso, creo que es así, como dije en el mensaje anterior a las fotos. Hasta que no sea usado por cualquier programa va a seguir estando ese dato (el número 5), pero me parece que no me tendría que dejar volver a consultar ese dato porque ya lo liberé, pero me sigue dejando consultarlo. Ahí está la duda.