位置:首頁 > 軟件操作教程 > 編程開發(fā) > C語言 > 問題詳情

C語言 內(nèi)存丟失

提問人:劉團圓發(fā)布時間:2020-12-03

    因為free()函數(shù)的用處在于實時執(zhí)行回收內(nèi)存的操作,如果程序簡單,當程序結束前不會使用過多內(nèi)存,也就不會降低系統(tǒng)性能,那么也可以不用free()函數(shù)去釋放內(nèi)存。當程序結束后,操作系統(tǒng)會完成釋放的功能。

    但如果在開發(fā)大型程序時不寫free()函數(shù)后果會很嚴重。因為可能在程序中要重復分配一萬次10MB的內(nèi)存,如果每次分配內(nèi)存后都使用free()函數(shù)釋放用完的內(nèi)存空間。那么這個程序只需使用10MB內(nèi)存就可以運行。但是如果不使用free()函數(shù),那么就要使用100GB的內(nèi)存!這其中包括絕大部分的虛擬內(nèi)存,而由于虛擬內(nèi)存的操作需要讀寫磁盤,會極大影響系統(tǒng)性能,甚至導致系統(tǒng)崩潰。

    因此,在程序中編寫malloc()函數(shù)分配內(nèi)存時都對應地寫出一個free()函數(shù)進行釋放,是一個良好的編程習慣。這不但體現(xiàn)在處理大型程序時的必要性,也在一定程度上體現(xiàn)程序優(yōu)美的風格和健壯性。

    但是,有時常常會有將內(nèi)存丟失的情況,例如:

    p01d=(int*)malloc(sizeof(int));

    pNew=(int*)malloc(sizeof(int));

    這兩段代碼分別表示創(chuàng)建了一塊內(nèi)存,并將內(nèi)存的地址傳給了指針pOld和pNew,此時指針pOld 和pNew分別指向兩塊內(nèi)存。如果進行pOld=pNew操作,pOld指針就指向了pNew指向的指針地址。這時再進行free(pOld);釋放內(nèi)存的操作,此時釋放pOld所指向的內(nèi)存空間是原來pNew指向的,于是這塊空間被釋放了。但是pOld原來指向的那塊內(nèi)存空間還沒有被釋放,不過因為沒有指針指向這塊內(nèi)存,所以這塊內(nèi)存就丟失了。

繼續(xù)查找其他問題的答案?

相關視頻回答
回復(0)
返回頂部