c語言標准庫提供了3個內存分配的函數,都包含在頭文件<stdlib.h>中
1、malloc
函數原型:
void *malloc( size_t size );
參數:要分配內存大小的字節數
返回值:指向該內存地址的指針,若錯誤返回NULL
功能:分配一塊指定大小的內存空間。
細節:該內存空間連續,且為堆空間,需要用free()函數手動釋放,空間內為垃圾數據。
2、calloc
函數原型:
void *calloc( size_t num, size_t size );
參數:1、要分配內存的數量 2、每塊內存的大小的字節數
返回值:指向該內存地址的指針,若錯誤返回NULL
功能:分配一塊指定大小的內存空間。
細節:該內存空間連續,且為堆空間,需要用free()函數手動釋放,空間內數據被初始化為0。
3、realloc
函數原型:
void *realloc( void *ptr, size_t size );
參數:1、要改變空間大小的對象 2、將原本的空間大小改為size
返回值:指向改變後內存地址的指針,若錯誤返回NULL
功能:改變一塊分配空間的大小。
細節:該內存空間連續,且為堆空間,需要用free()函數手動釋放。
size可以大於原空間大小,也可以小於原空間大小。大於原空間時,若在原空間後面有足夠的內存分配,則直接在擴充空間大小。參數1和返回值相等。
若不夠,則另尋一塊足夠大的連續內存地址,將原地址的內容復制到新地址中。回收原空間,並返回新地址的指針。