C語言動態分配記憶體為什麼總是提示警告?可以執行

時間 2021-09-01 19:32:35

1樓:北問邇

1. 就算沒有free(),main()結束後也是會自動釋放malloc()的記憶體的,這裡監控者是作業系統,設計嚴謹的作業系統會登記每一塊給每一個應用程式分配的記憶體,這使得它能夠在應用程式本身失控的情況下仍然做到有效地**記憶體。你可以試一下在taskmanager裡強行結束你的程式,這樣顯然是沒有執行程式自身的free()操作的,但記憶體並沒有發生洩漏。

2. free()的用處在於實時**記憶體。如果你的程式很簡單,那麼你不寫free()也沒關係,在你的程式結束之前你不會用掉很多記憶體,不會降低系統效能;而你的程式結束之後,作業系統會替你完成這個工作。

但你開始開發大型程式之後就會發現,不寫free()的後果是很嚴重的。很可能你在程式中要重複10k次分配10m的記憶體,如果每次使用完記憶體後都用free()釋放,你的程式只需要佔用10m記憶體就能執行;但如果你不用free(),那麼你的程式結束之前就會吃掉100g的記憶體。這其中當然包括絕大部分的虛擬記憶體,而由於虛擬記憶體的操作是要讀寫磁碟,因此極大地影響系統的效能。

你的系統很可能因此而崩潰。 3. 任何時候都為每一個malloc()寫一個對應的free()是一個良好的程式設計習慣。

這不但體現在處理大程式時的必要性上,更體現在程式的優良的風格和健壯性上。畢竟只有你自己的程式知道你為哪些操作分配了哪些記憶體以及什麼時候不再需要這些記憶體。因此,這些記憶體當然最好由你自己的程式來**。

2樓:匿名使用者

可能程式檢測到溢位了 但是溢位沒有影響到其他重要的記憶體 所以還能執行

3樓:182盤

沒看出****有毛病

C語言為陣列動態分配記憶體並賦值,為什麼第一種方法正確,第二種方法錯誤

一般來說,記憶體需要用多少,就開闢多少,如果你非要用迴圈的方式不斷的增加記憶體大小,建議你用以下方法 關鍵是用到函式realloc,這個函式的作用,網上很多,可以去查查。主要是用來在原有記憶體空間的基礎上,增加記憶體空間大小的。include include void main for i 0 i ...

c 程式設計中,用new動態分配記憶體後,不使用delete,被分配的記憶體會永遠丟失嗎

xxiao文 如果程式還在執行記憶體開闢的東西不會丟失,重啟之後你沒執行程式當然記憶體的東西會自動消失難道還累加啊 那你那程式豈不是比病毒還可怕,這些寫程式很基本的不釋放記憶體的程式不是好程式. new之後不delete,被分配的記憶體不會永遠丟失,而是一直被佔用。系統重啟,被分配的記憶體別說使用,...

關於c語言動態分配二維陣列的問題

如果要求行列都是動態的話,最簡單的辦法就是這樣,n行m列 int p int malloc sizeof int n for int i 0 i n i p i int malloc sizeof int m 然後就可以這樣傳遞 void f int p f p 不過用完了還要一個一個的去free ...