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就存儲在棧區,所以局部變量或臨時變量的地址不能返回
-------------局部變量不能把內存的塊返回回來的

 

好像沒啥意思哈^_~

就是理解一下現象出現的背後原因。

 

學無止境,道阻且長,記錄分享一下學習的過程

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