1.內存分配
void?*malloc(?size_t?size?); void?free(?void?*pointer);
? ? malloc(stdlib.h)的參數是需要分配的內存字節(jié)(字符)數。如果內存池的可用內存可用滿足這個需求,返回一個指向被分配的連續(xù)的內存塊的起始位置的指針。如果內存池為空,或者可用內存不足滿足要求,操作系統(tǒng)會返回一個一個NULL指針。對于要求邊界對齊的機器,malloc返回的內存的起始位置將始終滿足對邊界對齊要求最嚴格的類型的要求。
? ? free的參數只能是NULL或malloc、calloc、realloc返回的值。向free傳遞一個NULL參數不產生任何效果。
??
2.calloc和realloc
void?*calloc(?size_t?num_elements,?size_t?element_size?); void?*realloc(?void?*ptr,?size_t?new_size?);
? ? calloc的第一個參數為所需元素的數量,第二個參數為單個元素的字節(jié)數,其與malloc的最大區(qū)別在于calloc會在返回指向內存塊的指針之前將內存塊初始為0。
? ? realloc用于修改一個原先已經分配的內存塊的大小。如果用于擴大內存塊,那么這個內存塊原先的內容將保留,新添加的內存添加到原先內存塊的后面,新內存不以任何方式初始化;如果用于縮小內存塊,該內存塊尾部的部分便被拿掉,但剩余的內存塊的原先內容將保留;如果原先內存塊無法改變大小,realloc將分配另一塊正確大小的內存,并將原先內存塊的內容復制到新的內存塊上。如果第一參數為NULL,則行為與malloc一模一樣。
3.常見動態(tài)內存錯誤
注意:
? ? 1.對NULL指針進行解引用
? ? 2.對分配的內存進行操作時越過邊界
? ? 3.釋放非動態(tài)分配的內存
? ? 4.試圖釋放一塊動態(tài)分配的內存的一部分
? ? 5.一塊動態(tài)內存被釋放后繼續(xù)使用
? ? 6.分配內存但使用完畢后不釋放(內存泄漏memory leak)
警告:動態(tài)內存分配后應檢查所請求的內存是否成功分配。





