PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 關於free()這個函數的使用
作者:
Petyr
(小指頭)
2017-08-21 01:46:37
小弟程式算是新手
最近遇到一個很頭大的 free() invaild pointer 的bug
也爬過有關於free的文章百思不得其解
想來請教一下各位前輩
程式碼大略是這樣的
作者:
Schottky
(順風相送)
2017-08-21 01:50:00
合理懷疑是 buffer overflow,問題出在你沒寫明之處檢查 A 段程式是否意外覆蓋了這兩個變數
作者:
FRAXIS
(喔喔)
2017-08-21 02:41:00
在 b malloc 的時候先印出來記憶體位置然後在 free b 的時候確認是不是同一個位置如果不一樣 那代表變數被改變過了如果一樣 那可能是重複 free 或是 malloc 本身的資訊已經被搞壞了..
作者:
winken2004
(新竹肥宅)
2017-08-21 03:15:00
malloc a b之後 先確定ab不是null吧if(a == NULL) assert("error");然後自己加一些debug訊息判斷一下發生甚麼事
作者:
mike0227
(我又小看了那複雜的世界)
2017-08-21 03:58:00
free(NULL);是合法的。pointer一定被動到或是沒malloc
作者:
steve1012
(steve)
2017-08-21 04:47:00
Free 完把ptr 指到null 才是好習慣 建議先改了以後看中間是不是有哪裡改到然後建議你抽出有問題的片段 貼可以重現bug 的程式上來一開始宣告沒要馬上用的話 最好也指到null 較容易debug話說a用不到pointer 為啥不在b裡面宣告?
作者:
b0920075
(Void)
2017-08-21 08:16:00
我比較傾向於overflow造成chunk的info被動到,這樣有沒有設成null應該都會出錯當然pointer被改掉也是很有可能
作者:
descent
(「雄辯是銀,沉默是金」)
2017-08-21 17:08:00
你先把 char *a, char *b 改成全域變數來宣告,看看是否正常?
作者: jerryh001
2017-08-21 17:13:00
貼原始code吧 不然只能搬水晶球了
作者:
Lipraxde
(Lipraxde)
2017-08-21 17:40:00
不知到關掉優化會不會有影響
作者:
grayStone
(灰色石頭)
2017-08-21 17:42:00
source code
作者: stucode
2017-08-21 20:47:00
即使簡化 建議至少要貼「最小可重現問題的程式碼」這可以訓練你發現問題的能力 有時甚至會直接解決
作者:
enonrick
(EnonRick)
2017-08-21 23:48:00
樓上們超強的,一點像樣的snippet都沒有也討論得起來
作者:
CoNsTaR
((const *))
2017-08-22 01:56:00
其實樓主如果有能力找到最小可重現問題的程式碼的話,那他其實也不用上來問了
作者:
Schottky
(順風相送)
2017-08-22 02:08:00
@enonrick 我們上次有團購壓克力水晶球
作者:
steve1012
(steve)
2017-08-22 04:20:00
好好奇啊 要是原po真的很害羞的話可以私我我幫你看再幫你抽出有問題的地方貼上來
作者:
linotwo
(._.)
2017-08-23 04:40:00
a b 變數直接宣告在 B 的 scope 裡面比較好有可能是 A 裡面有地方去非法覆蓋到 heap 資訊
作者:
tinlans
( )
2017-08-25 12:11:00
很多實作是把配置資訊黏在 malloc() 傳回位址之前,如果那塊空間被當陣列存取,索引值不小心是負值時就可能把它蓋掉,然後 free() 就會認為這塊空間之前沒配置過。
繼續閱讀
[問題][已解決] boost source code 的編譯問題
Clangpp
[問題] 設計一個非資工系C語言課程
ktecv2000
[問題] 關於C++ virtual function Runtime的考題
fsvy
[問題] build 失敗 minGW
SKTP
[問題] 驅動跟應用程式請推薦書籍
sdarktemplar
[問題] CUDA 影像處理範例
v00623
[問題] c++拿各程式的cpu使用率
MOONY135
[問題] 請教關於Axel-Tobias Schreiner的OOP一書
zzss2003
[問題] makefile 與CUDA的問題
rkwhy
[問題] 看不太懂這串簡單的程式碼
zzss2003
Links
booklink
Contact Us: admin [ a t ] ucptt.com