¡¡free me cambia cosas!!
Mi programa funciona correctamente, sin liberar punteros, pero cuando llamo a free al final, para liberar punteros, me cambia (sin hacer nada más) el contenido de otra cosa.
-¿Puede que el puntero esté apuntando a la memoria donde tengo guardado el dato que cambia?
-Free lo único que hace no es ponerlo a NULL, ¿por qué cuando lo pongo yo a NULL directamente ( puntero = NULL ) no hace lo mismo?
Estoy hecho un lío, si me pueden ayudar. Saludos. Daniel.
-¿Puede que el puntero esté apuntando a la memoria donde tengo guardado el dato que cambia?
-Free lo único que hace no es ponerlo a NULL, ¿por qué cuando lo pongo yo a NULL directamente ( puntero = NULL ) no hace lo mismo?
Estoy hecho un lío, si me pueden ayudar. Saludos. Daniel.
Hola;
Cuando se usan punteros, el compilador supone (a veces mal) que uno sabe lo que hace, así que hay que tener más cuidado que cuando no se usan.
Con respecto a la primera pregunta, así como está planteada, yo te diría que no; si en otra parte del código no usas el contenido del puntero, nada puede cambiar. Claro que si después de free pretendes leer lo apuntado, te dirá cualquier cosa (a veces no, depende del compilador), pero si quieres escribir nuevamente en él, con suerte no cuelgas la máquina.
Y sobre la segunda: no, definitivamente. free libera la memoria asignada a tu puntero para que pueda ocuparse por otra cosa, a medida que se haga necesario, pero no es lo mismo que poner el puntero a NULL. puntero = NULL no libera la memoria asignada, sólo lo hace apuntar a una dirección inválida por naturaleza.
Esto no parece que vaya a resolver el problema, pero espero que te ayude a no buscar donde no está.
Alejandro
Cuando se usan punteros, el compilador supone (a veces mal) que uno sabe lo que hace, así que hay que tener más cuidado que cuando no se usan.
Con respecto a la primera pregunta, así como está planteada, yo te diría que no; si en otra parte del código no usas el contenido del puntero, nada puede cambiar. Claro que si después de free pretendes leer lo apuntado, te dirá cualquier cosa (a veces no, depende del compilador), pero si quieres escribir nuevamente en él, con suerte no cuelgas la máquina.
Y sobre la segunda: no, definitivamente. free libera la memoria asignada a tu puntero para que pueda ocuparse por otra cosa, a medida que se haga necesario, pero no es lo mismo que poner el puntero a NULL. puntero = NULL no libera la memoria asignada, sólo lo hace apuntar a una dirección inválida por naturaleza.
Esto no parece que vaya a resolver el problema, pero espero que te ayude a no buscar donde no está.
Alejandro
