Devuelve un puntero que apunta a una variable local [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Cómo acceder a una variable local desde una función diferente usando punteros? 9 respuestas

No sé por qué funciona esto. Dado que x es una variable local, pensé que obtendría un error cuando intento devolverlo. Sin embargo, la primera impresión funciona bien, pero luego imprime 0. ¿Alguien puede explicar lo que está pasando aquí?

#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;
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta