浏览 2202 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-11-26
最后修改:2010-12-25
#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; } Typical memory layout. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |