This is a simple piece of code which i wrote to check whether it is legitimate to return the address of a local variable and my assumptions were proved correct by the compiler which gives a warning saying the same:
warning: function returns address of local variable
But the correct address is printed when executed… Seems strange!
#include<stdio.h>
char * returnAddress();
main()
{
char *ptr;
ptr = returnAddress();
printf("%p\n",ptr);
}
char * returnAddress()
{
int x;
printf("%p\n",&x);
return &x;
}
The behaviour is undefined.
Anything is allowed to happen when you invoke undefined behaviour – including behaving semi-sanely.
The address of a local variable is returned. It remains an address; it might even be a valid address if you’re lucky. What you get if you access the data that it points to is anyone’s guess – though you’re best off not knowing. If you call another function, the space pointed at could be overwritten by new data.
You should be getting warnings about the conversion between
intpointer andcharpointer – as well as warnings about returning the address of a local variable.