Retorna um ponteiro que aponta para uma variável local [duplicate]

Esta pergunta já tem uma resposta aqui:

Como acessar uma variável local de uma função diferente usando ponteiros? 9 respostas

Não sei por que isso funciona. Como x é uma variável local, pensei em receber um erro ao tentar retorná-lo. No entanto, o primeiro printf funciona bem, mas depois imprime 0. Alguém pode explicar o que está acontecendo aqui?

#include <stdio.h>

int* func1() {
    int x = 123123;
    int *y = &x;
    return y;
}

int main()
{
    int* c = func1();
    printf("%d\n", *c); // output: 123123
    printf("%d\n", *c); // output: 0
    return 0;
}

questionAnswers(3)

yourAnswerToTheQuestion