Как time.h обращается с памятью - PullRequest
0 голосов
/ 28 апреля 2020

Извините, это, вероятно, глупый вопрос, но я не смог найти ответ в документации для time.h.

Поэтому, когда я звоню, например, gmtime

time_t today;
struct tm *info;
time(&today);
info = gmtime(&today);

Возвращает указатель на структуру tm. Я предположил, что он возвращает указатель на часть памяти, выделенную с помощью mallo c, но если я сейчас вызываю free для info - free возвращает ошибку. Так как же библиотека time.h управляет выделением памяти и стоит ли беспокоиться о ее "освобождении"?

1 Ответ

1 голос
/ 28 апреля 2020

что он возвращает указатель на часть памяти, выделенную с помощью mallo c, но если я сейчас вызываю free для информации

Нет, gmtime возвращает указатель на состояние c object.

From C99 7.23.3p1 :

За исключением функции strftime, каждая из этих функций возвращает указатель на один из двух типов stati c objects: разбитая временная структура или массив char. Выполнение любой из функций, которые возвращают указатель на один из этих типов объектов, может перезаписать информацию в любом объекте того же типа, на который указывает значение, возвращаемое любым предыдущим вызовом любого из них. Реализация должна вести себя так, как будто никакие другие библиотечные функции не вызывают эти функции.

как библиотека time.h обрабатывает выделение памяти

Используется память, выделенная с помощью c длительности хранения, действительной для всего выполнения вашей программы.

Должен ли я беспокоиться о "освобождении" этого?

Нет.

...