malloc 函數 n為要分配的位元組數,如果成功,返回獲得空間的首地址,如果分配失敗,則返回NULL,malloc分配的記憶體是未初始化過的,所以必須用memset初始化 在s指向的的地址,填充n個ch malloc分配的是堆上的記憶體,顯式調用free來釋放 calloc 函數 calloc函數和ma ...
malloc 函數
#include <stdlib.h>
void* malloc(int n);
- n為要分配的位元組數,如果成功,返回獲得空間的首地址,如果分配失敗,則返回NULL,malloc分配的記憶體是未初始化過的,所以必須用memset初始化
#include <string.h>
void *memset(void *s, int ch, size_t n);
- 在s指向的的地址,填充n個ch
- malloc分配的是堆上的記憶體,顯式調用free來釋放
#include <stdlib.h>
void free(void *p);
calloc 函數
calloc函數和malloc類似,都是從堆上分配記憶體,函數聲明如下
#include <stdlib.h>
void *calloc(int n,int size);
- 如果執行成功,獲得大小為n的空間,並返回空間的首地址,如果失敗,函數返回NULL。
- 和malloc不同的是,calloc分配的都是經過初始化的,內容為0。
- calloc函數適合為數組申請空間,n為數組個數,size設置為數組大小。
- 使用free釋放空間
realloc 函數
realloc函數可以實現記憶體分配和記憶體釋放的功能,函數聲明如下:
#include <stdlib.h>
void* realloc(void * p,int n);
- p必須為指向堆記憶體空間的指針,即由malloc函數、calloc函數或realloc函數分配空間的指針。realloc函數將指針p指向的記憶體塊的大小改變為n位元組。
- 如果n小於或等於p之前指向的空間大小,保持原有狀態不變。如果n大於原來p之前指向的空間大小,則系統將重新為p從堆上分配一塊大小為n的記憶體空間,同時,將原來指向空間的內容依次複製到新的記憶體空間上,p之前指向的空間被釋放。
- realloc函數分配的空間也是未初始化的。
- realloc分配的空間,須有free釋放