2 回答

TA貢獻1863條經(jīng)驗 獲得超2個贊
使用free(ptr)釋放ptr指向的內(nèi)存時并不需要提供要釋放內(nèi)存的大小,這是因為在ptr附近的某個位置存放有維護該內(nèi)存區(qū)域的數(shù)據(jù),這是由內(nèi)存申請函數(shù) malloc 等產(chǎn)生的。實際上在ptr之前有個結構體,指示了該塊內(nèi)存的信息。如果你的程序因為內(nèi)存越界內(nèi)修改了這個結構體,則會導致free函數(shù)出錯返回,并不釋放任何內(nèi)存。
其他出錯情況也大多由于類似原因,比如傳遞了錯誤的指針,該指針已經(jīng)被釋放或與空閑空間中的某個區(qū)塊重疊等。

TA貢獻1864條經(jīng)驗 獲得超6個贊
free()函數(shù)釋放內(nèi)存失敗通常有兩個原因:
1.重復釋放;
2.想釋放不是由該進程分配的內(nèi)存.
重復釋放就是指針指向的內(nèi)存已經(jīng)釋放了,再次調(diào)用free()函數(shù)去釋放它.
釋放不是由該進程分配的內(nèi)存時有可能會造成異常,通常比如說一個程序調(diào)用DLL里面的函數(shù),該函數(shù)分配了內(nèi)存,而調(diào)用者去釋放該內(nèi)存就有可能造成異常(此時應該在DLL里面提供一個函數(shù)專門來釋放分配的內(nèi)存)
添加回答
舉報