где находятся переменная в стеке или в куче? передеписал вопрос

прошлый свой вопрос - тупанул в постановке задачи. сморозил абсурд. поэтому переписываю. вопрос прежний : где находятся 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 шт):

Автор решения: Harry

Вот здесь -

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);

уже по сути нигде. В области памяти в стеке, которая уже была отмечена как свободная (и может быть использована для хранения других данных, а может, уже и использована...).

Нельзя использовать адрес локальной переменной после выхода из функции - это типичное неопределенное поведение.

То, что вы получаете при выводе те же значения, которые записывали - ничего не значит. Как я уже писал в ответе на другой ваш вопрос - вы можете перебегать дорогу на красный свет светофора. Можете переходить ее с завязанными глазами и заткнутыми ушами. И у вас это будет отлично получаться... до поры до времени. Как в этом случае :)

→ Ссылка