性質
一般使用後要使用free(起始地址的指針)對内存進行釋放,不然内存申請過多會影響計算機的性能,以至于得重啟電腦。如果使用過後不清零,還可以使用指針對該塊内存進行訪問。
與malloc和realloc函數的區别
三者都是分配内存,都是stdlib.h庫裡的函數,但是也存在一些差異。
(1)malloc函數。其原型void*malloc(unsigned int num_bytes);
num_byte為要申請的空間大小,需要我們手動的去計算,如int *p=(int *)malloc(20*sizeof(int)),如果編譯器默認int為4字節存儲的話,那麼計算結果是80Byte,一次申請一個80Byte的連續空間,并将空間基地址強制轉換為int類型,賦值給指針p,此時申請的内存值是不确定的。
calloc()在動态分配完内存後,自動初始化該内存空間為零,而malloc()不初始化,裡邊數據是未知的垃圾數據。
(2)calloc函數,其原型void*calloc(size_t n, size_t size);
其比malloc函數多一個參數,并不需要人為的計算空間的大小,比如如果他要申請20個int類型空間,會int *p=(int *)calloc(20,sizeof(int)),這樣就省去了人為空間計算的麻煩。但這并不是他們之間最重要的區别,malloc申請後空間的值是随機的,并沒有進行初始化,而calloc卻在申請後,對空間逐一進行初始化,并設置值為0;
(3)realloc函數和上面兩個有本質的區别,其原型void realloc(void *ptr,size_t new_Size)
用于對動态内存進行擴容(及已申請的動态空間不夠使用,需要進行空間擴容操作),ptr為指向原來空間基址的指針,new_size為接下來需要擴充容量的大小。