[問題] memory

看板C_and_CPP作者 (Wrong-hole~~~~)時間14年前 (2010/04/05 20:33), 編輯推噓3(3012)
留言15則, 5人參與, 最新討論串1/1
我寫的是一個可以讓使用者繼續決定要不要玩的小遊戲 第一次玩的話都沒有問題 但是當繼續玩完第二次以後就當了 跑出這個"_BLOCK_TYPE_IS_VALID(phead->nBlockUse)" 我GOOGLE了一下發現似乎是對一個pointer free了兩次所產生的 但是我檢查完以後也把每個free完的pointer都設成NULL 還是無效... 請問該怎麼辦? 還有其他種可能嗎??? 多謝~ (我是用VC++寫的) 附上程式碼.C:http://paste.plurk.com/show/224097/ .H:http://paste.plurk.com/show/224098/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.55.99

04/05 20:42, , 1F
應該就是記憶體違規存取了 貼code吧
04/05 20:42, 1F

04/05 20:43, , 2F
另外free完的pointer設成NULL其實對有無違規存取沒啥差別
04/05 20:43, 2F

04/05 20:45, , 3F
不過我不知道哪邊有問題 而且CODE很長耶...
04/05 20:45, 3F

04/05 20:47, , 4F
那用debug去跑 看他跑到哪一行掛掉就是那裏有問題囉
04/05 20:47, 4F

04/05 20:48, , 5F
喔喔 OK 我試試
04/05 20:48, 5F

04/05 20:49, , 6F
VC6 把他設成NULL就解決了說@@", VC2005倒是沒這問題
04/05 20:49, 6F

04/05 20:50, , 7F
VC還蠻好用的 按個F5跑一跑就會停在掛掉的地方 @_@
04/05 20:50, 7F
※ 編輯: Dsman 來自: 140.113.55.99 (04/05 22:40)

04/06 13:29, , 8F
free前:檢查pointer!=null為真才free, free後:pointer=null
04/06 13:29, 8F

04/07 00:39, , 9F
已解決了
04/07 00:39, 9F

04/07 00:40, , 10F
似乎是當我重新玩第二次的時候 OS分配的記憶體與之前宣告的
04/07 00:40, 10F

04/07 00:41, , 11F
global pointer指向的記憶體重複到 所以變成兩個pointer指向
04/07 00:41, 11F

04/07 00:42, , 12F
同一塊記憶體 導致free了兩次 把每次重新玩的時候再跟OS要
04/07 00:42, 12F

04/07 00:42, , 13F
新的記憶體就解決了
04/07 00:42, 13F

04/07 00:43, , 14F
不過怪的是原本的程式 別人的跑出來沒有BUG 我的有 XD
04/07 00:43, 14F

04/07 20:44, , 15F
if this is problem, yours OS should crash before debu
04/07 20:44, 15F
文章代碼(AID): #1BkTYhvR (C_and_CPP)