я должен освободить указатель, возвращаемый getpwuid () в Linux? - PullRequest
7 голосов
/ 02 октября 2008

После того, как я позвоню getpwuid(uid), у меня есть ссылка на указатель. Должен ли я освободить этот указатель, когда я его больше не использую? Читая справочные страницы, он говорит, что ссылается на некоторую статическую область, которая может быть перезаписана последующими вызовами тех же функций, поэтому я не уверен, стоит ли мне касаться этой области памяти.

Спасибо.

Ответы [ 3 ]

9 голосов
/ 02 октября 2008

Нет. Вам не нужно освобождать результат. Вы можете вызвать free (3) только для указателей, выделенных в куче с помощью malloc (3), calloc (3) или realloc (3).

Статические данные являются частью данных программы или сегментов bss и будут сохраняться до завершения процесса (или перезаписи exec (2)).

5 голосов
/ 02 октября 2008

Используйте функции *_r (getpwuid_r()) для поточно-ориентированных (реентерабельных) функций, которые позволяют вам предоставить буферное пространство для размещения возвращаемой информации. Обязательно проверьте errno на предмет успеха или неудачи. Если вы не используете реентерабельные функции, вы можете смело предположить, что функция возвращает данные, которые не нужно освобождать, но которые также будут перезаписаны при последовательных вызовах той же функции.

1 голос
/ 02 октября 2008

На самом деле он возвращает указатель на уже существующую структуру, поэтому вы должны не освободить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...