где находятся переменная в стеке или в куче? передеписал вопрос
прошлый свой вопрос - тупанул в постановке задачи. сморозил абсурд. поэтому переписываю. вопрос прежний : где находятся jjj->a и jjj->bbb в стеке или в куче?
#include <stdlib.h>
#include <stdio.h>
typedef struct {
int a;
int b;
} myStruct;
myStruct* test() {
myStruct zzz;
zzz.a = 555;
zzz.b = 111;
myStruct* jjj = &zzz;
return jjj;
}
int main(int argc, char* argv[])
{
myStruct* zzz = test();
printf("%d %d", zzz->a, zzz->b);
return 0;
}
Ответы (1 шт):
Вот здесь -
myStruct* test() {
myStruct zzz;
zzz.a = 555;
zzz.b = 111;
myStruct* jjj = &zzz;
return jjj;
}
пока что (во время выполнения функции) в стеке. А вот здесь -
myStruct* zzz = test();
printf("%d %d", zzz->a, zzz->b);
уже по сути нигде. В области памяти в стеке, которая уже была отмечена как свободная (и может быть использована для хранения других данных, а может, уже и использована...).
Нельзя использовать адрес локальной переменной после выхода из функции - это типичное неопределенное поведение.
То, что вы получаете при выводе те же значения, которые записывали - ничего не значит. Как я уже писал в ответе на другой ваш вопрос - вы можете перебегать дорогу на красный свет светофора. Можете переходить ее с завязанными глазами и заткнутыми ушами. И у вас это будет отлично получаться... до поры до времени. Как в этом случае :)