2008-10-01 2 views
6

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

Спасибо.

ответ

9

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

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

1

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

5

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

+0

Кажется, есть проблемы с памятью даже функции * _r – codingfreak

Смежные вопросы