[問題] 要怎樣知道有沒有free成功呢?

看板C_and_CPP (C/C++)作者 (冀憶)時間16年前 (2009/05/01 13:38), 編輯推噓4(4021)
留言25則, 8人參與, 最新討論串1/1
如題 因為就算free了的話 只要沒動到剛剛free那裡的記憶體 資料還是不會變 這樣要怎樣知道到底有沒有free成功呢? 我有查一下 free似乎沒有回傳值說 這樣實在有點難判斷到底是不是free對東西了=口=" 有沒有什麼辦法可以知道是否free成功呢?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.194.90

05/01 13:56, , 1F
等不等於NULL?
05/01 13:56, 1F

05/01 14:07, , 2F
樓上是說指標等不等於NULL嗎? 可是我記得指標不會變吧
05/01 14:07, 2F

05/01 14:07, , 3F
似乎還是只向那個位置 除非你再讓他指向別的地方
05/01 14:07, 3F

05/01 14:36, , 4F
哪有什麼成不成功,C 就是假設一定成功。
05/01 14:36, 4F

05/01 14:46, , 5F
free 對不對是自己要判斷的
05/01 14:46, 5F

05/01 14:49, , 6F
用 *nix 環境的話用 valgrind 跑下去可以知道。
05/01 14:49, 6F

05/01 15:45, , 7F
我後來自已想出一個測試方法了@@"
05/01 15:45, 7F

05/01 15:46, , 8F
不過還是謝謝t大跟E大
05/01 15:46, 8F

05/01 16:07, , 9F
什麼方法?分享一下吧
05/01 16:07, 9F

05/01 19:06, , 10F
哈 其實我覺得這方法笨笨怪怪的 因為如果在free之後
05/01 19:06, 10F

05/01 19:06, , 11F
緊接著用malloc的話 取同一塊記憶體的機率很大
05/01 19:06, 11F

05/01 19:08, , 12F
這樣我只要看看我新malloc到的位址 跟free掉的有沒有一樣
05/01 19:08, 12F

05/01 19:09, , 13F
就知道有沒有free成功拉 因為如果沒free成功 怎麼可能還
05/01 19:09, 13F

05/01 19:09, , 14F
malloc到一樣的位址勒? 當然這樣的測試是有可能失敗的...
05/01 19:09, 14F

05/01 19:10, , 15F
不過成功機率還蠻大的啦^^"
05/01 19:10, 15F

05/01 21:16, , 16F
阿只要沒有segmentation fault或access violation
05/01 21:16, 16F

05/01 21:16, , 17F
不就成功了 想那麼多  ̄σ ̄
05/01 21:16, 17F

05/01 21:31, , 18F
所以如果你 free 失敗了你想怎麼處理?
05/01 21:31, 18F

05/01 22:21, , 19F
等失敗再說!(自信過度)
05/01 22:21, 19F

05/01 22:24, , 20F
free失敗的結果就是會在不該寫入的區域寫入markfree資訊
05/01 22:24, 20F

05/01 22:24, , 21F
要知道能不能free 那你就想辦法用_msize或類似函式查看吧
05/01 22:24, 21F

05/01 22:25, , 22F
ㄜ 就代表我那部分的程式碼寫錯了 冏rz 找bug比較有方向
05/01 22:25, 22F

05/01 22:25, , 23F
看看他是不是heap
05/01 22:25, 23F

05/01 22:32, , 24F
謝謝 sun大提供的方法 沒聽過_msize說 我還太嫩= ="
05/01 22:32, 24F

05/02 00:50, , 25F
如果你 free 了不該 free 的區塊,它會直接死給你看
05/02 00:50, 25F
文章代碼(AID): #19-ehYwL (C_and_CPP)
文章代碼(AID): #19-ehYwL (C_and_CPP)