Happy new year everyone.
I am studying C language. I had a question when some code run about pointer.
#include <stdio.h>
int * b() {
    int a = 8;
    int *p = &a;
    printf("the addr of a in b: %p\n", p); the addr of a in b: 0x7ffccfcba984
    return p;
}
int main () {
    
   int *c = b();
   printf("the addr of a in main: %p\n", c); // the addr of a in main: 0x7ffccfcba984
   printf("The value of ptr is : %d\n", *c ); // 8
   
   return 0;
}
Can you feel something odd in this code?
I learned that a variables declared inside a function is deallocated at the end of the function. However, I can still access variables outside the function like above code when trying to access the address of "a" variable. If the deallocation is true, int a should be deallocated at the end of the b function. It is like a free is not used after variables is declared. Is there some knowledge I am missing about deallocation? Could you tell me why I can still access it?
 
     
    