回覆列表
  • 1 # Hello world1

    根據使用函式不同,作用各不相同。共同點均是動態分配一段記憶體,使用後需要用free函式釋放。所有動態分配函式均宣告在stdlib.h中。

    1 malloc

    void *malloc(unsigned int num_bytes);

    功能

    分配長度為num_bytes位元組的記憶體塊

    返回值

    如果分配成功則返回指向被分配記憶體的指標(此儲存區中的初始值不確定),否則返回空指標NULL。當記憶體不再使用時,應使用free()函式將記憶體塊釋放。函式返回的指標一定要適當對齊,使其可以用於任何資料物件。

    說明

    關於該函式的原型,在以前malloc返回的是char型指標,新的ANSIC標準規定,該函式返回為void型指標,因此必要時要進行型別轉換。

    2 calloc

    void *calloc(size_t n, size_t size);

    在記憶體的動態儲存區中分配n個長度為size的連續空間,函式返回一個指向分配起始地址的指標;如果分配不成功,返回NULL。

    calloc在動態分配完記憶體後,自動初始化該記憶體空間為零,而malloc不初始化,裡邊資料是隨機的垃圾資料。

    3 realloc

    void *realloc(void *mem_address, unsigned int newsize);

    功能

    先判斷當前的指標是否有足夠的連續空間,如果有,擴大mem_address指向的地址,並且將mem_address返回,如果空間不夠,先按照newsize指定的大小分配空間,將原有資料從頭到尾複製到新分配的記憶體區域,而後釋放原來mem_address所指記憶體區域(注意:原來指標是自動釋放,不需要使用free),同時返回新分配的記憶體區域的首地址。即重新分配儲存器塊的地址。

    返回值

    如果重新分配成功則返回指向被分配記憶體的指標,否則返回空指標NULL。

    注意

    當記憶體不再使用時,應使用free()函式將記憶體塊釋放。

  • 中秋節和大豐收的關聯?
  • TCP/IP協議發展史?