Давайте предположим, что у меня есть следующий код C:Необходимо освободить память, используемую для возвращаемых переменных из функций (C)?
void myfunction() {
time_t t = 0;
struct tm *ct;
time(&t);
ct = localtime(&t);
}
Как вы можете видеть, функция localtime
возвращает новый указатель на struct tm
переменной. Из того, что я знаю, для возвращаемой переменной из функции, чтобы быть действительным в контексте вызывающего абонента он должен выполнить по крайней мере одно из следующих действий:
- Возвращенный переменная должна быть объявлена в контексте вызывающего абонента или выше контекст связанные с абонентом.
- Возвращаемая переменная должна иметь выделенную память в куче.
В моем случае первый пункт не применяется, поэтому нормально думать, что 2-й выполняется.
Я прав?
Если да, значит ли это, что мне нужно позвонить бесплатно по переменной ct
после ее использования?
Если нет, можете ли вы немного детализировать?
Спасибо!
EDIT:
Из ответов, я понял, что должен быть еще один пункт в требованиях, что переменная, который будет использоваться в условиях, когда вернулся. Это должны быть статические переменные. Есть ли другая возможность?
Это зависит. Вы читаете документацию, а затем, ну, вы узнаете. Чаще всего нет. –
Другие возможности несколько более неясны, но файлы с отображением памяти не являются, строго говоря, выделенными из кучи, но все еще доступны. Кроме того, во встроенном мире могут быть адреса памяти, соответствующие физическому оборудованию. – rra