Возвращая локальную структурную переменную, не выделенную динамически? - PullRequest
4 голосов
/ 21 июня 2011

рассмотрите следующий код: -

struct mystruct {
    int data;
    struct mystruct *next;
};

void myfunc ()
{

 struct mystruct s1;
 s1.data= 0;
 s1.next = NULL;
 myfunc2(&s1);
 ..
 ..
}

Безопасно ли передавать адрес этой локальной структуры другой функции. Будет ли эта локальная структура доступна для использования вне функции или она уже будет освобождена?

Ответы [ 3 ]

6 голосов
/ 21 июня 2011

Безопасно передавать адрес локальной переменной в другую функцию. Время жизни переменной продолжается до конца блока (оператор функции или составной), в котором она объявлена.

Не безопасно возвращать адрес локальной переменной или сохранять указатель на нее и использовать его после возврата объявленной функции.

1 голос
/ 21 июня 2011

Будет доступно в myfunc2, но только до тех пор, пока myfunc не вернется.

Если myfunc2 каким-то образом запомнит этот указатель и попытается использовать его после возвращения myfunc, произойдут непредсказуемые вещи, потому что стек уже восстановлен и указатель укажет на любой мусор.

1 голос
/ 21 июня 2011

Ваша формулировка неудобна в вопросе.

Вы можете передать его другим функциям по адресу. Это все еще будет в допустимой области.

Но вы не можете вернуть его по адресу (который вы здесь не делаете) вне функции, в которой вы его объявили.

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