c語言之內存管理(二)

內存泄漏幾乎是很難避免的,會產生泄漏的內存,也就是說由malloc系列函數或new操作符分配的內存。如果用完之後沒有及時free或delete,這塊內存就無法釋放,直至整個程序終止。
1)如何使用malloc函數
malloc函數的原型:
(void *)malloc(int size)
malloc函數的返回值是一個void 類型的指針,參數爲int類型數據,即申請分配的內存大小,單位是字節。內存分配成功之後,malloc函數返回這塊內存的首地址,你需要用一個指針來接受這個地址。由於malloc返回的是void *類型的,所以你必須要強制轉換爲你說接收的類型 
如char *p = (char *)malloc(100);
在堆上分配了100字節的內存,返回的是這塊內存的首地址,把地址強制轉化爲char*類型後賦給char*類型的指針變量p,malloc不一定分配成功,因爲malloc函數申請的是連續的一段內存
2)用malloc函數申請0字節內存
申請0字節內存,函數並不返回NULL,而是返回一個正常的內存地址,但是你無法使用這塊大小爲0的內存。這好尺子上的某個刻度,刻度本身並沒有長度,只有某倆個刻度一起才能量出長度,對於這點還是要小心,因爲這時候if(NULL != p)校驗將不起作用。
3)內存釋放
既然有分配,就必須有釋放。不然的話,有限的內存會被用光,而沒有釋放的內存卻在空閒,與malloc對應的函數就是free了,free函數的參數就是釋放內存塊的首地址free(p);
4)內存釋放之後
釋放指針變量p之後,就一定要把p=NULL;這個NULL就是之前我們所說的“栓野狗的狗鏈子”,否則很容易成爲野指針。


發佈了75 篇原創文章 · 獲贊 45 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章