動態內存分配函數 malloc 與 new 的區別

malloc是C運行庫函數,該函數和free函數配對使用。函數malloc的原型如下:

void * malloc(size_t size);

使用malloc函數時,需要注意兩點:

(1),malloc返回值的類型是void *,所以在調用malloc時要顯示地進行類型轉換,將void  *將void *的類型轉換成所需要的指針類型。

(2),malloc 函數本身並不識別要申請的內存的是什麼類型,它只關心內存的總字節數。所以在malloc的“( )”中使用sizeof運算符可以防止錯誤的發生。

例如:

int * p  = (int *)malloc(sizeof(int)*lenght);

函數free的原型如下:

void free( void *p);

free 函數的使用不像malloc函數那樣複雜。

因爲指針p 的類型以及它所指的內存在調用函數free之前都是知道的,所以語句free(p)能正確地釋放內存。如果p 是NUUL指針,那麼free對p無論操作多少次都不會出問題。如果p不是NULL指針,那麼free對p連續操作兩次就會導致程序運行錯誤。

  運算符new 和運算符delete配對使用。

由於運算符new內置了sizeof 、類型轉換和類型安全檢查功能,所以運算符new使用起來要比函數malloc簡單的多,而且不易出錯,寫的程序更健壯。

比如下面的代碼用運算符new申請一塊長度爲length的整數類型的內存:

int * p = new int[length];

函數delete釋放內存的代碼示例如下:

delete p;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章