Saber si un puntero apunta a algún sitio.

Started by HaCkZJuaNN, April 02, 2009, 02:18:05 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

HaCkZJuaNN

Básicamente, necesito saber algún comando o algún modo de saber si un puntero ha sido inicializado para poder usar free(puntero). Pudiera ser que haya creado la variable del puntero pero aún no le haya puesto ninguna dirección de memoria a la que apuntar, por lo que si hago free puedo borrar dios sabe qué. Gracias.

SplinterGU

Los punteros los tenes que inicializar vos, con NULL o 0.
Si son punteros declarados como tales en alguna seccion global, private, public, etc... no hace falta que los inicialices, se inicializan solo (eso solo en bennu/fenix, en otros lenguajes la cosa es diferente).
Ahora si es un array de punteros o un puntero dentro de una estructura que creaste con malloc, entonces tenes que inicializarlo vos.

Y cuando haces free, tenes que hacer:

if (puntero) free(puntero); puntero = NULL; end

no olvides poner el puntero a NULL, por si luego entras en otra funcion (o en la misma) que hace un free de ese elemento, no lo haga cuando este ya esta liberado.

otra cuestion, cuidado con usar punteros que no sean globales desde una funcion, llamar a otra que lo libere y asignarle NULL dentro de esta ultima, porque la primera seguira teniendo el valor no nulo... a menos que pases puntero de puntero.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

HaCkZJuaNN

Entonces, cuando hago if(puntero), eso es cierto cuando el puntero no es null o cuando no es 0, o es lo mismo?

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2