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搭配使用的案例如下
5、從堆上獲得的記憶體空間在程式結束後,系統不會将其自動釋放!!需要程式員來自己管理。是以,一個程式結束時,必須保證所有從堆上獲得的記憶體空間已被安全釋放,否則會導緻記憶體洩露。
如何處理?
作業系統提供了free函數來處理這個情況。
void free(void *p)
可以看到,free函數的形參是void*,是以可以接受任意類型的指針實參。
需要注意的是,free函數隻是釋放指針指向的内容,而該指針仍然指向原來指向的地方,此時就形成經典的野指針,若再對該指針進行操作,就會引起不可預期的錯誤。
是以free的安全使用法,在上例的return 0前加上下面兩句:
free(p);
p = NULL;
将指針的值置為NULL