簡體   English   中英

malloc 調用 realloc,然后崩潰

[英]malloc calls realloc, then crashes

我正在使用 linux 嵌入式設備中的守護程序,該守護程序在運行時隨機崩潰,通常是在啟動幾個小時后。 我調查了崩潰報告(堆棧轉儲)並檢測到它在 2 種情況下崩潰,請遵循以下調用跟蹤:

  • 案例 1. 我的函數 -> calloc -> malloc -> realloc(SIGSEGV 崩潰)
  • 案例 2. 我的函數 -> calloc -> malloc -> realloc -> abort ->
    提高(SIGABRT 崩潰)

我讀了這個鏈接,我的問題似乎是由於堆損壞為什么我得到 C malloc 斷言失敗? .

我為內存分配函數(malloc、calloc、realloc 和 free)制作了自己的包裝器版本,以在分配的內存周圍附加圍欄並通過哈希表監視它們,因此我可以檢測緩沖區溢出或釋放兩次。 然而,它仍然崩潰,我的圍欄沒有任何內存沖突。

所以我想問2個問題:

  1. 你有什么想法來調試這種問題嗎?
  2. malloc 什么時候調用 realloc ? 我在 glibc 上簡要查看了 malloc 源代碼,但沒有看到對 realloc 的調用。

我的同事找到了根本原因(通過調查核心轉儲文件和 libc malloc 的源代碼),有一點是因為鏈表的刪除函數中的錯誤 => 內存損壞 => calloc 崩潰,所以它寫入已釋放的內存

實際上malloc不調用reallocmalloc調用__malloc_consolidate代替。 在 libc 的 obj 轉儲文件中, __malloc_consolidate'的 asm 代碼在realloc的 asm 代碼下,所以我雖然malloc調用realloc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM