#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; }