在編寫很多程式時,我們無法提前預知需要多少記憶體來儲存某個定義變數(陣列)中的特定資訊,所需記憶體的大小需要在真正執行時才能確定。動態記憶體的優點在於函式執行完畢之後仍然可以被其他函式使用。
動態記憶體的釋放:使用free;free掉乙個指標,只是將指標指向的記憶體空間釋放掉了,並沒有將指標置為null,指標仍指向被釋放掉的記憶體的位址,在判斷指標是否為null的時候,通常是通過if(pt == null) ,這時,導致指標成為了野指標。並且野指標和空指標不同,野指標有位址,或者說是指向記憶體,對野指標進行操作,會造成記憶體錯誤,並且野指標無法從if語句進行判斷其是否為null,所以在指標釋放之後要將指標置為null。free 釋放的是指標指向的記憶體。而指標是乙個變數,只有程式結束時才被銷毀。申請了記憶體不能不free,也不能多次free。而多次free會導致系統崩潰(非法寫記憶體)。
舉個簡單例子:
#include #include int main()}
int main()
else
free(name);
free(name);
printf("no problem2222222\n");
return 0;
}
動態記憶體分配
在c 中建立乙個物件時,我們必須要為這個物件申請一塊記憶體,而且要用建構函式對這塊記憶體進行初始化。c 中的new和delete相對於c的庫函式malloc和free在這方面有很大的優勢,所以我們主要講的是運算子new和delete。當用new來建立乙個物件時,它會自動在堆裡為物件分配記憶體並且為這...
動態記憶體分配
為什麼使用動態記憶體分配?c語言中的一切操作都是基於記憶體的 變數和陣列都是記憶體的別名,如何分配這些記憶體由編譯器在編譯期間決定 定義陣列的時候必須指定陣列唱的 而陣列長度是在編譯期就必須決定的 需求 程式執行的過程中,可能需要使用一些額外的記憶體空間 malloc和free malloc和fre...
動態記憶體分配
c的儲存類別有4種 自動的 auto 靜態的 statics 暫存器的 register 外部的 extern 全域性變數時分配在記憶體中的靜態儲存區 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,是在編譯時賦初值的,只賦初值一次,在程式執行時它已有初值,以後每次呼叫函式時不再重新賦初...