2017-04-02 68 views
0
stack.out: malloc.c:2372: 
sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1)- 1) * 2])) - 
__builtin_offsetof (struct malloc_chunk, fd)))) 
    && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1)) & ~((2 *(sizeof(size_t))) - 1))) 
    && ((old_top)->size & 0x1) && ((unsigned long) old_end & pagemask) == 0)' failed. 
Aborted (core dumped) 

當我正在處理我的代碼,其中包括堆棧主題,突然可以看到我的GCC編譯器的錯誤,我沒有得到任何東西,這是什麼意思,如果你知道這事,請告訴我錯誤的程序。提前感謝。中止核心轉儲

+2

誰應該讀那混亂?至少格式化消息,提供[mcve]和所有必需的信息。閱讀[問]瞭解詳情。 – Olaf

+0

@Olaf拿起FSF。 ;-)當堆內存被破壞時,這似乎是[glibc發出的錯誤消息](https://www.google.com/search?q=malloc.c%3A2372)。把這個「錯誤信息」放在一個新的編碼器上是有點不公平的...... –

+0

@AndrewHenle:我大部分都沒有使用代碼格式。在編輯之前很難看到消息來自哪裏。太糟糕了,這不是OP;這種編輯應該要求作者完成;至少這表明他有興趣獲得答案。但是,由於他不添加所需的信息,我認爲他不是。 – Olaf

回答

2

看起來你已經損壞了堆內存,可能是因爲你寫了一些malloc()內存的末尾。使用gdb獲得函數調用的追蹤,並且它們可以幫助您調試它。爲了讓你的程序的追蹤,假設它被稱爲MYPROG,鍵入以下內容:

gdb myProg 
run 

它得到這個異常後,鍵入:

bt 

因爲你很可能踐踏內存,那裏的錯誤發生可能不是這個回溯堆棧的一部分,但它是一個開始的好地方。如果這沒有幫助,那麼使用valgrindmemwatch,這兩者都被描述爲here,這些工具會告訴你在寫入內存結束的地方,導致損壞和核心轉儲。