malloc時出錯。提示 0xC0000374: 堆已損壞 (參數: 0x778CD8D0)什麼原因?
問題解決,sizeof(link)==4
sizeof(LNode)==實際值
應該就是此錯誤 謝謝各位
--------------------------------------------------------
謝謝輪子哥及各位的回答 有點明白了一些
然後有人說是第一個紅框出錯 sizeof(link)
我的link是指針類型
然後LNode和link其實是同一個結構體
typeof struct LNode{
…
}LNode,*link;
創建空鏈表的函數其實就是創建了一個頭結點 在創建空鏈表頭結點之前也有一個分配內存的操作就是給 P分配內存 好像也涉及到了上邊大家提到link lnode類似的問題
明天看一下是不是那裡的問題
————————————————————
大約三分之二的幾率會出現這種情況 不知道為什麼 有時候malloc能夠成功
有時候就會顯示這樣出錯
無論是在我創建鏈表
還是創建結點
調用malloc時都可能會出錯
上邊都是在CreatPoyln函數里調用的 然後主函數里調用CreatPoyln函數 不知道是因為此的原因
並且頭文件也已經包含了&
困擾一天 請各位大神解答
這多半根malloc沒關係,你別的代碼因為越界了,結果寫到了Link的前面或者後面去,把malloc自己的數據結構給寫壞了,然後錯誤沒有立刻發生,延遲到free和malloc的時候才炸。
堆破壞就是,你的程序在別的地方內存訪問溢出了,寫壞了不屬於你的那部分內存
然後其它的代碼使用到那塊被你寫壞的內存時,就炸了
所以問題不在malloc,是在malloc前面的某個地方
當然是C語言的原因啦
你的Link應該是指針類型。
sizeof(Link)應該是4,你malloc的只有4個位元組的空間,而不是你認為的結構體的大小
你可以與下面Lnode那一行進行對比,重點查你的Link類型我也遇到過這個錯誤。
sizeof(Link)你以為分配的是結構體大小的內存,實際上只分配了指針大小的4個位元組。
當你想向裡面寫內容時按結構體的大小去寫的,超出了4個位元組的邊界,寫到了不屬於該結構體的內存中去了,而C語言對越界是不做檢查,所以不會報錯。然後當其它的代碼使用到那塊被你寫壞的內存時,就崩了
bug在第一個紅框里
推薦閱讀:
※寫 patch 修復了一個軟體的 bug,卻被拒絕合併是一種怎樣的體驗?
※如何看待能自動修復bug的CodePhage?
※守望先鋒有哪些有趣的bug?
※玩一些遊戲切換出去之後就無法再次運行的原因是什麼?