天天看點

malloc、free函數使用注意事項

1、malloc函數的作用

malloc函數可以從堆上獲得指定位元組的記憶體空間。

2、malloc函數的聲明

void* malloc(int n);

(1)、n為要求配置設定的位元組數;配置設定成功傳回記憶體空間首位址;失敗傳回NULL

(2)、傳回類型是void型指針,故可以将其轉換後賦給任意類型指針,通過指派就可以通過操作從堆上擷取的記憶體空間。

3、malloc函數使用注意點

由于malloc配置設定的記憶體空間是未初始化的,是以使用前應使用memset将其全部初始化為0。

void *memset(void *p,int c,int n)

p為要清0的記憶體首位址;C為要設定的值,如0;n為被操作的記憶體空間的位元組長度;

4、malloc與memset搭配使用的案例如下

malloc、free函數使用注意事項

5、從堆上獲得的記憶體空間在程式結束後,系統不會将其自動釋放!!需要程式員來自己管理。是以,一個程式結束時,必須保證所有從堆上獲得的記憶體空間已被安全釋放,否則會導緻記憶體洩露。

如何處理?

作業系統提供了free函數來處理這個情況。

void free(void *p)

可以看到,free函數的形參是void*,是以可以接受任意類型的指針實參。

需要注意的是,free函數隻是釋放指針指向的内容,而該指針仍然指向原來指向的地方,此時就形成經典的野指針,若再對該指針進行操作,就會引起不可預期的錯誤。

是以free的安全使用法,在上例的return 0前加上下面兩句:

free(p);

p = NULL;

将指針的值置為NULL

繼續閱讀