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?
玩一些遊戲切換出去之後就無法再次運行的原因是什麼?

TAG:程序員 | Bug | C編程語言 | CC | malloc |