2008-10-01 18 views
6

Después de llamar a getpwuid (uid), tengo una referencia a un puntero. ¿Debería liberar eso cuando ya no lo use? Al leer las páginas man, dice que hace referencia a un área estática, que puede ser sobrescrita por llamadas posteriores a las mismas funciones, así que estoy seguro de que debería tocar esa área de memoria.¿Debería liberar el puntero devuelto por getpwuid() en Linux?

Gracias.

Respuesta

9

No. No es necesario que libere el resultado. Solo puede llamar a free (3) en los punteros asignados en el montón con malloc (3), calloc (3) o realloc (3).

Los datos estáticos forman parte de los segmentos de datos o bss de un programa y persistirán hasta que el proceso finalice (o lo sobrescriba el ejecutivo (2)).

1

En realidad, devuelve un puntero a una estructura ya existente, por lo que debe no liberarlo.

5

Use las funciones *_r (getpwuid_r()) para las funciones compatibles con el proceso (reentrada) que permiten que se les suministre el espacio de amortiguación para colocar la información devuelta. Asegúrese errno cheque para el éxito o el fracaso. Si no usa las funciones de reentrada, puede asumir que la función devuelve datos que no necesitan ser liberados, pero que también serán sobrescritos por llamadas sucesivas a la misma función.

+0

Parece que hay problemas con la memoria incluso * _r funciones – codingfreak

Cuestiones relacionadas