Gabriel
Gabriel

Reputation: 2373

should I free pointer returned by getpwuid() in Linux?

After I call getpwuid(uid), I have a reference to a pointer. Should I free that pointer when I don't use it anymore? Reading the man pages, it says that it makes reference to some static area, that may be overwritten by subsequent calls to the same functions, so I'm not sure if I should touch that memory area.

Thanks.

Upvotes: 9

Views: 3063

Answers (3)

Steve Baker
Steve Baker

Reputation: 4373

Use the *_r functions (getpwuid_r()) for thread-safe (reentrant) functions that allow you to supply the buffer space to place the returned information in. Be sure check errno for success or failure. If you do not use reentrant functions you can safely assume that the function returns data that does not need to be freed, but will also be overwritten by successive calls to the same function.

Upvotes: 5

camh
camh

Reputation: 42488

No. You do not need to free the result. You can only call free(3) on pointers allocated on the heap with malloc(3), calloc(3) or realloc(3).

Static data is part of a program's data or bss segments and will persist until the process exits (or is overwritten by exec(2)).

Upvotes: 12

dguaraglia
dguaraglia

Reputation: 6028

Actually it returns a pointer to an already existing structure, so you should not free it.

Upvotes: 1

Related Questions