#include <stdio.h>
#include <stdlib.h>
/*
* str is a literal. So it is allocated in readonly segment. It is OK to return
* it. But the data pointed by the pointer can't be modified.
*/
char *static_pointer_return()
{
char *str = "world";
return str;
}
/*
* Never to return a pointer pointing to data in stack. GCC issues a warning
* for it.
*/
char *stack_pointer_return()
{
char str[] = "world";
return str;
}
void pointer_param(char * str)
{
printf("param pointer: %s\n", str);
/*
* If str is allocated from heap, free succeeds. If str is pointing to data
* in stack, core dump.
*/
free(str);
}
int main(int argc, const char *argv[])
{
printf("static pointer return: %s\n", static_pointer_return());
printf("stack pointer return: %s\n", stack_pointer_return());
char str[] = "hello";
pointer_param(str);
return 0;
}