Я должен освободить указатель, возвращаемый getpwuid() в Linux?

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

Благодарю.

3 ответа

Решение

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

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

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

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

Другие вопросы по тегам