Информация об изменениях

Сообщение Re: Насколько корректно использовать адрес переменной в стек от 20.07.2017 3:50

Изменено 20.07.2017 3:53 Лазар Бешкенадзе

Re: Насколько корректно использовать адрес переменной в стеке
Здравствуйте, Nick-77, Вы писали:

N7>
N7>static MType *f(MType *val, int size){
N7>    MType tmp; 
N7>    if (val)
N7>        tmp = *val;
N7>        else 
N7>        // do smth to create new 
N7>    ;
N7>    // .....
N7>    return &tmp;
N7>}
N7>


N7>т.е. вроде как несмотря на то, что формально tmp и её адреса после выхода из f не существует, реально стек ещё никто не успел (?) испортить и содержимое верное.


Я не знаю как сегодня но в 1998 это был отстой. Было понятие signal. Между выходом из функции и попыткой использовать содержимое по этому адресу может произойти туча всего и этот стек будет перезаписан 10 раз.
Re: Насколько корректно использовать адрес переменной в стек
Здравствуйте, Nick-77, Вы писали:

N7>
N7>static MType *f(MType *val, int size){
N7>    MType tmp; 
N7>    if (val)
N7>        tmp = *val;
N7>        else 
N7>        // do smth to create new 
N7>    ;
N7>    // .....
N7>    return &tmp;
N7>}
N7>


N7>т.е. вроде как несмотря на то, что формально tmp и её адреса после выхода из f не существует, реально стек ещё никто не успел (?) испортить и содержимое верное.


Адрес то существует.

Я не знаю как сегодня но в 1998 это был отстой. Было понятие signal. Между выходом из функции и попыткой использовать содержимое по этому адресу может произойти туча всего и этот стек будет перезаписан 10 раз.