2020年4月19日 星期日

C 語言 - malloc、free 與 calloc

malloc 跟 free


    一般來說要將函式結果回傳是不能用 pointer,因為一旦函式結束 stack 的空間就會被釋出,所以 pointer 會指向的資料是危險的。這時就會先動態地宣告一個位址給 pointer,但這類的記憶體會被存放在 heap 而非 stack,所以開發者必須自行釋放。
  • pointer.c
  •     void
        showMalloc(int pointerValue)
        {
            int *p = malloc(sizeof(int));
    
            printf("Address : %p\n", p);
            printf("Value   : %d\n", *p);
    
            *p = pointerValue;
    
            printf("Address : %p\n", p);
            printf("Value   : %d\n", *p);
            
            free(p);
        }
  • output
  •     Address : 00682B90
        Value   : 6826496
        Address : 00682B90
        Value   : 100

calloc


    會幫你初始值的 malloc
  • pointer.c
  •     void
        showMalloc(int pointerValue)
        {
            int *p = calloc(1, sizeof(int));
    
            printf("Address : %p\n", p);
            printf("Value   : %d\n", *p);
    
            *p = pointerValue;
    
            printf("Address : %p\n", p);
            printf("Value   : %d\n", *p);
    
            free(p);
        }
  • output
  •     Address : 00722B90
        Value   : 0
        Address : 00722B90
        Value   : 100

參考資料 :
https://openhome.cc/Gossip/CGossip/MallocFree.html

0 意見:

張貼留言

Popular Posts