Tema: Free vs NULL
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/05/2013, 02:28
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Free vs NULL

NULL es un valor nulo; free es una funcion que libera la memoria bloqueada por malloc (o realloc). Cuando declaras una variable por defecto se le asigna los datos que hay en el bloque de memoria que le corresponde (es decir que puede que no sea nulo): para asegurarnos de que es nulo le asignamos nulo manualmente para que despues se puedan hacer las comprovaciones de seguridad

Código:
tipo_dato *dato;//esto por si solo puede que no sea nulo

if(dato != NULL) {//aquí falla la comprovacion
    operacion_con_dato(dato);//y aqui revienta la aplicacion
}
Esto suele usarse en racks de datos: intentas generar una lista de datos y ante cualquier fallo llamas a una funcion que los libera todos, pero si aplicas 'free' sobre algo que no ha bloqueado tu aplicacion se produce un error, para eso se inicializa a nulo antes de hacer nada, y al final de todo cuando has terminado de trabajar y en el caso que la variable sea reutilizable se libera con 'free' y tambien se asigna nulo para evitar esos problemas.

Saludos
vosk