亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以下內容是關于free失敗的例子,麻煩大佬幫忙看看~

以下內容是關于free失敗的例子,麻煩大佬幫忙看看~

瀟湘沐 2021-12-31 10:06:14
當我們釋放動態分配的內存時,通常會遭遇內存釋放失敗的錯誤,我遇到這么一個問題,當我無意間越界訪問了動態分配內存時,在釋放內存時,就會出現Access violation writing的錯誤,但我不太確定是不是由于這個原因引起的錯誤,希望高手解釋一下,引起free失敗的常見原因
查看完整描述

2 回答

?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

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

查看完整回答
反對 回復 2022-01-04
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

free()函數釋放內存失敗通常有兩個原因:
1.重復釋放;
2.想釋放不是由該進程分配的內存.
重復釋放就是指針指向的內存已經釋放了,再次調用free()函數去釋放它.
釋放不是由該進程分配的內存時有可能會造成異常,通常比如說一個程序調用DLL里面的函數,該函數分配了內存,而調用者去釋放該內存就有可能造成異常(此時應該在DLL里面提供一個函數專門來釋放分配的內存)

查看完整回答
反對 回復 2022-01-04
  • 2 回答
  • 0 關注
  • 449 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號