Stack and heap allocation in C

系统 1462 0

 

    #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.
Stack and heap allocation in C

Stack and heap allocation in C


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论