2013-05-13 43 views
0

我正在調試進程崩潰,& backtrace看起來有點像下面。 該進程崩潰在代碼中的不同點,但所有時間回溯歸結爲malloc。gdb backtrace顯示malloc

我試着將堆從128M增加到256M,但那也沒有幫助。 核心轉儲的大小大約爲164 M,而運行進程使用大約相同的virt內存。

你們能請你指點我正確的方向。 欣賞幫助。

#0 
#1 
#2 
#5 0xb7fc7966 in malloc (size=141858520) 
. 
. 
. 
#16 0x0805ef69 in main (argc=1, argv=0xbffffa64) 
. 

bt 2:這是我得到的第二次回溯。同樣的過程,但在代碼中的不同點崩潰。

#0 
#1 
#2 
#5 0xb7fc7677 in realloc (p=0xe01fd8, size=139629112) 
. 
. 
. 
#18 0x0805ef69 in main (argc=1, argv=0xbffffa64) 
+1

我們可以看到源代碼嗎? – Magn3s1um 2013-05-13 19:04:38

+2

您的代碼中其他位置的內存損壞的可能性很大。最有可能的是(a)寫入已經釋放的指針,或者(b)覆蓋超過動態分配緩衝區的末尾。顯示你的代碼會有所幫助。但是,可能性是,這個錯誤並不是你認爲它的地方。 – 2013-05-13 19:06:09

+0

您是否使用[valgrind](http://valgrind.org)來調試內存泄漏?你用'gcc -Wall -g'編譯你的代碼(並且改進它直到所有警告消失)? – 2013-05-13 19:07:52

回答

1

任何崩潰內malloc幾乎堆損壞的保證標誌。

在Linux上,用於查找此類堆損壞的工具是ValgrindAddress Sanitizer

請參閱this page瞭解兩者之間的差異。