作者x3795566 (冀憶)
看板C_and_CPP
標題[問題] 要怎樣知道有沒有free成功呢?
時間Fri May 1 13:38:36 2009
如題
因為就算free了的話
只要沒動到剛剛free那裡的記憶體 資料還是不會變
這樣要怎樣知道到底有沒有free成功呢?
我有查一下 free似乎沒有回傳值說
這樣實在有點難判斷到底是不是free對東西了=口="
有沒有什麼辦法可以知道是否free成功呢??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.194.90
1F:→ maplefog:等不等於NULL? 05/01 13:56
2F:→ x3795566:樓上是說指標等不等於NULL嗎? 可是我記得指標不會變吧 05/01 14:07
3F:→ x3795566:似乎還是只向那個位置 除非你再讓他指向別的地方 05/01 14:07
4F:→ tinlans:哪有什麼成不成功,C 就是假設一定成功。 05/01 14:36
5F:推 Ebergies:free 對不對是自己要判斷的 05/01 14:46
6F:→ tinlans:用 *nix 環境的話用 valgrind 跑下去可以知道。 05/01 14:49
7F:→ x3795566:我後來自已想出一個測試方法了@@" 05/01 15:45
8F:→ x3795566:不過還是謝謝t大跟E大 05/01 15:46
9F:推 cobrasgo:什麼方法?分享一下吧 05/01 16:07
10F:→ x3795566:哈 其實我覺得這方法笨笨怪怪的 因為如果在free之後 05/01 19:06
11F:→ x3795566:緊接著用malloc的話 取同一塊記憶體的機率很大 05/01 19:06
12F:→ x3795566:這樣我只要看看我新malloc到的位址 跟free掉的有沒有一樣 05/01 19:08
13F:→ x3795566:就知道有沒有free成功拉 因為如果沒free成功 怎麼可能還 05/01 19:09
14F:→ x3795566:malloc到一樣的位址勒? 當然這樣的測試是有可能失敗的... 05/01 19:09
15F:→ x3795566:不過成功機率還蠻大的啦^^" 05/01 19:10
16F:→ MOONRAKER:阿只要沒有segmentation fault或access violation 05/01 21:16
17F:→ MOONRAKER:不就成功了 想那麼多  ̄σ ̄ 05/01 21:16
18F:推 littleshan:所以如果你 free 失敗了你想怎麼處理? 05/01 21:31
19F:→ MOONRAKER:等失敗再說!(自信過度) 05/01 22:21
20F:→ sunneo:free失敗的結果就是會在不該寫入的區域寫入markfree資訊 05/01 22:24
21F:→ sunneo:要知道能不能free 那你就想辦法用_msize或類似函式查看吧 05/01 22:24
22F:→ x3795566:ㄜ 就代表我那部分的程式碼寫錯了 冏rz 找bug比較有方向 05/01 22:25
23F:→ sunneo:看看他是不是heap 05/01 22:25
24F:→ x3795566:謝謝 sun大提供的方法 沒聽過_msize說 我還太嫩= =" 05/01 22:32
25F:推 littleshan:如果你 free 了不該 free 的區塊,它會直接死給你看 05/02 00:50