#include<stdio.h>
int* add(int *a, int *b){
    int c = *a + *b ;
    return &c;
}
int main(void) {
    int a=3,b=2 ;
    int *ptr = add(&a,&b); // doubt in this line as it returns 5
    printf("%d",*ptr);
}
I have doubt in the line commented.
I am using Codeblocks IDE(GNU gcc compiler), and I was wondering that if the *ptr in my main is pointing to the address of c in the add function, then it should print garbage as after the function `add completes its execution, it's popped from the stack, and the memory should be deallocated for it in the stack . So technically, it should be pointing to garbage. Then how is it printing the correct value. 
 
     
     
    