1樓:北問邇
1. 就算沒有free(),main()結束後也是會自動釋放malloc()的記憶體的,這裡監控者是作業系統,設計嚴謹的作業系統會登記每一塊給每一個應用程式分配的記憶體,這使得它能夠在應用程式本身失控的情況下仍然做到有效地**記憶體。你可以試一下在taskmanager裡強行結束你的程式,這樣顯然是沒有執行程式自身的free()操作的,但記憶體並沒有發生洩漏。
2. free()的用處在於實時**記憶體。如果你的程式很簡單,那麼你不寫free()也沒關係,在你的程式結束之前你不會用掉很多記憶體,不會降低系統效能;而你的程式結束之後,作業系統會替你完成這個工作。
但你開始開發大型程式之後就會發現,不寫free()的後果是很嚴重的。很可能你在程式中要重複10k次分配10m的記憶體,如果每次使用完記憶體後都用free()釋放,你的程式只需要佔用10m記憶體就能執行;但如果你不用free(),那麼你的程式結束之前就會吃掉100g的記憶體。這其中當然包括絕大部分的虛擬記憶體,而由於虛擬記憶體的操作是要讀寫磁碟,因此極大地影響系統的效能。
你的系統很可能因此而崩潰。 3. 任何時候都為每一個malloc()寫一個對應的free()是一個良好的程式設計習慣。
這不但體現在處理大程式時的必要性上,更體現在程式的優良的風格和健壯性上。畢竟只有你自己的程式知道你為哪些操作分配了哪些記憶體以及什麼時候不再需要這些記憶體。因此,這些記憶體當然最好由你自己的程式來**。
2樓:匿名使用者
可能程式檢測到溢位了 但是溢位沒有影響到其他重要的記憶體 所以還能執行
3樓:182盤
沒看出****有毛病
c語言如何給動態分配的陣列賦值,C語言如何給動態分配的陣列賦值
那樣賦值也只能用可變參了.void set int value,int num,int b int malloc 3 sizeof int set b,3,4,5,6 set 設定變數,設定的數量,值1,值2. 1 當成普通陣列使用,用for迴圈即可賦值。2 例程 include include i...
C語言指標動態記憶體分配,C語言中的動態記憶體分配的用法舉例
void malloc size t size 這個函式請求分配大小為size位元組的記憶體,並返回指向該塊記憶體起始位置的指標 它接受的引數型別size t是unsigned int的一個typedef,這種型別用來表示資料型別的大小 如char型別的大小為1 位元組 它返回的是一個void 型別...
誰能講解了C 中 有關動態分配記憶體的問題
靜態與動態記憶體分配的兩個主要區別是 1 靜態物件是有名字的變數,我們直接對其進行操作。而動態物件是沒有名字的變數,我們通過指標間接地對它進行操作。2 靜態物件的分配與釋放由編譯器自動處理。程式設計師需要理解這一點,但不需要做任何事情。相反,動態物件的分配與釋放,必須由程式設計師顯示地管理,相對來說...