2008-10-01 4 views
6

Après avoir appelé getpwuid (uid), j'ai une référence à un pointeur. Dois-je libérer cela quand je ne l'utilise plus? En lisant les pages de manuel, il est indiqué qu'il fait référence à une zone statique, qui peut être écrasée par des appels ultérieurs aux mêmes fonctions, donc je suis sûr que je devrais toucher cette zone de mémoire.devrais-je libérer le pointeur retourné par getpwuid() sous Linux?

Merci.

Répondre

9

Non. Vous n'avez pas besoin de libérer le résultat. Vous pouvez uniquement appeler free (3) sur les pointeurs alloués sur le tas avec malloc (3), calloc (3) ou realloc (3).

Les données statiques font partie des données d'un programme ou des segments bss et persisteront jusqu'à la fin du processus (ou sont remplacées par exec (2)).

1

En fait, il renvoie un pointeur vers une structure déjà existante, vous devez donc le pas le le libérer.

5

Utilisez les fonctions *_r (getpwuid_r()) pour les fonctions thread-safe (réentrantes) qui vous permettent de fournir l'espace tampon dans lequel placer les informations renvoyées. Vérifiez le code d'erreur pour la réussite ou l'échec. Si vous n'utilisez pas de fonctions réentrantes, vous pouvez supposer que la fonction renvoie des données qui n'ont pas besoin d'être libérées, mais qui seront également remplacées par des appels successifs à la même fonction.

+0

Il semble qu'il y ait des problèmes avec la mémoire même les fonctions * _r – codingfreak

Questions connexes