C语言--内存里的数据[续]

上一节了解到内存四区的概念,并应用了其中栈区和全局区的知识,而代码区对我们透明;那么就在继续了解一下堆区吧。

堆区—----malloc、new、free、delete

 

//堆区存放
char *getmem(int num)
{
    char*p1 = NULL;
    p1 = (char*)malloc(sizeof(char)*num);
    if (p1 == NULL)
        return NULL;
    else
        return p1;
}
//栈区存放
char *getmem2()
{
    char p2[64];
    strcpy(p2, "23456");
    return p2;
}

void main()
{
    char *as = NULL;
    as = getmem(6);
    if (as == NULL)
        return;
    strcpy(as, "12345");//往as指针指向的内存空间拷数据
    printf("as:%s\n", as);

    as = getmem2();
    printf("as:%s\n", as);
    system("pause");
    return;
}

 

发现debug调试出错,release可以通过,
上篇的p的是全局区的返回,全局区的是操作系统管理,程序退出后清理或者主动释放,而栈区在运行完这个子程序就被清理了,这里的p2就存储在栈区,所以局部变量或临时变量的地址不能返回
-------------局部变量不能把内存的块返回回来的

 

好像没啥意思哈^_~

就是理解一下现象出现的背后原因。

 

学无止境,道阻且长,记录分享一下学习的过程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章