论坛首页 编程语言技术论坛

Stack and heap allocation in C

浏览 2202 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-11-26   最后修改:2010-12-25
C

 

#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.

  • 大小: 14 KB
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics