malloc和free是c語言的標準庫函數,函數原型分別爲
void * malloc(size_t size) 參數代表字節個數
void free(void * p) 參數代表內存地址
使用上:
- void func()
- {
- //開闢一個空間
- int* p1=(int*)malloc(sizeof(int));
- if(p1==NULL)
- {
- exit(1);
- }
- free(p1);
- //開闢多個空間
- int*p2=(int*)malloc(sizeof(int)*4);
- if(p2==NULL)
- {
- exit(1);
- }
- free(p2);
- }
- void func()
- {
- //開闢一個空間
- int* p1=new int(1);
- delete p1;
- //開闢多個空間
- int*p2=new int[4];
- delete []p2;
- }
(1)malloc開闢空間類型大小需手動計算,new是由編譯器自己計算;
(2)malloc返回類型爲void*,必須強制類型轉換對應類型指針,new則直接返回對應類型指針;
(3)malloc開闢內存時返回內存地址要檢查判空,因爲若它可能開闢失敗會返回NULL;new則不用判斷,因爲內存分配失敗時,它會拋出異常bac_alloc,可以使用異常機制;
(4)無論釋放幾個空間大小,free只傳遞指針,多個對象時delete需加[]
(5)因爲new/delete是操作符,它調用operator new / operator delete,它們可以被重載,在標準庫裏它有8個重載版本;而malloc/free不可以重載;
(6)對於malloc分配內存後,若在使用過程中內存分配不夠或太多,這時可以使用realloc函數對其進行擴充或縮小,但是new分配好的內存不能這樣被直觀簡單的改變