No puedo entender. Ejemplo de la clase de almacenamiento estático C

No puedo entender un ejemplo en Let us C por Yashwant Kanetkar. Aquí está el fragmento de código:

main() { int *j; int *fun(); j = fun(); // If we add a function call here, the print statement prints a garbage value. printf("\n%d",*j); } int *fun() { int k = 35; return (&k); } 

Ahora, en el código anterior, no puedo entender por qué tener una llamada de función antes de la statement printf resulta en la impresión de un valor de basura. Tengo una vaga idea de que cuando el valor devuelto apunta a una ubicación de memoria en la stack, algo falla cuando se llama a otra función antes de imprimir este valor. Pero no puedo visualizar claramente lo que sucede aquí. Por favor ayuda.

en tu código

 int *fun() { int k = 35; return (&k); } 

estás devolviendo la dirección de una variable local desde fun() . Cualquier uso del valor de retorno lleva a un comportamiento indefinido .

Para explicar, una vez que la función fun() termina de ejecutarse, no hay existencia de k . Entonces, tratar de usar algo como &k no es válido.

Nota: Cualquiera que sea la explicación que se proporciona en ese libro en particular [relacionado con el lavado de la stack o algo así], no está estandarizado en c.

 int k = 35; 

es local para la función fun() así que una vez que regreses de fun() la memoria asignada para k ya no es válida y estás devolviendo &k (dirección de esa variable), lo que conducirá a un comportamiento indefinido