malloc失敗的一個原因

         最近幫同學調一段程序,調試發現,程序其中的一個malloc函數返回值爲空,我們知道如果申請分配的內存空間太大,系統無法獲得符合要求的內存塊,malloc函數會返回NULL,而這個程序中申請的空間是很小的,系統內存也很充裕,所以問題不在這兒。

         後來仔細推敲代碼,發現程序中在返回值爲NULL的malloc之前,有過若干次的malloc,然而對申請到的空間初始化的範圍大小超過了前邊malloc申請的大小,改正之後程序運行正常。

         應該是寫越界,有可能覆蓋到了下一個空閒塊的頭節點,從而破壞了 malloc管理的環形鏈表, malloc就無法從一個空閒塊的指針字段找到下一個空閒塊了。

        所以當遇到malloc失敗時,可以檢查一下,操作的內存空間大小是否超過了之前malloc申請的空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章