2013-05-02 53 views
1

我使用Ubuntu Lucid Lynx,使用Kate編寫我的C++程序並使用g ++編譯它們。 我目前正在編寫一個遺傳算法程序,並且所有的工作都很好,除了我執行程序的時候有80%的內存映射。我無法弄清楚內存映射的意義或如何解決它。 這裏是輸出:當我編譯我的程序時,這個內存映射是什麼意思?

*** glibc detected *** ./main: double free or corruption (!prev): 0x0881fdc8 *** 
======= Backtrace: ========= 
[0x80da7f8] 
[0x80dec69] 
[0x80a5441] 
[0x80a546d] 
[0x8059227] 
[0x8058b2f] 
[0x8058f41] 
[0x80567ec] 
[0x80c075f] 
[0x8048191] 
======= Memory map: ======== 
00149000-0014a000 r-xp 00000000 00:00 0   [vdso] 
08048000-08165000 r-xp 00000000 08:02 2101716 /home/armandmaree/Desktop/Projek_Fase2 (copy)/main 
08166000-08168000 rw-p 0011d000 08:02 2101716 /home/armandmaree/Desktop/Projek_Fase2 (copy)/main 
08168000-08170000 rw-p 00000000 00:00 0 
09a45000-09a67000 rw-p 00000000 00:00 0   [heap] 
b7600000-b7621000 rw-p 00000000 00:00 0 
b7621000-b7700000 ---p 00000000 00:00 0 
b77e2000-b77e3000 rw-p 00000000 00:00 0 
bfc35000-bfc4a000 rw-p 00000000 00:00 0   [stack] 
Aborted 

如果你知道我怎麼能找出問題所在或至少對我解釋存儲器映射意味着什麼,那將是巨大的。 在此先感謝。

+2

'double free or corruption':最有可能的是你在不應該的東西上調用'delete'。 – juanchopanza 2013-05-02 16:24:05

+1

或者您在分配內存的限制之前(之前或之後)寫入的內容。 – 2013-05-02 16:25:29

+0

嘗試使用-g進行編譯,您可能會得到更好的堆棧跟蹤 – parkydr 2013-05-02 16:26:07

回答

2

內存映射告訴你你的進程崩潰了。 [Backtrace:]部分告訴您發生崩潰時的堆棧回溯(哪個函數稱爲哪個函數)。內存映射告訴你在你的進程的哪個地址有什麼數據。

像其他人一樣,在使用-g編譯並在調試器(gdb)下運行你的程序以獲得更好的信息。由於崩潰是由堆損壞引起的,所以使用valgrind工具將會有所幫助,因爲它專注於這類問題。

相關問題