2011-05-30 62 views
1

可能重複:
glibc detected error如何糾正***在節目中的glibc檢測到***錯誤

嗨, 我執行我的項目在GNU C++時,我收到這個錯誤,當我在開關櫃中按下一個選項。隨着程序的其餘部分執行正常,我留下了這個錯誤。我不知道它是什麼以及它爲什麼會發生。請解釋並指導我在哪裏開始看我的程序。

錯誤詳細信息:

*** glibc detected *** ./test.out: free(): invalid pointer: 0xbfb1c874 *** 
======= Backtrace: ========= 
/lib/libc.so.6[0x55c0f1] 
/lib/libc.so.6(cfree+0x90)[0x55fbc0] 
./test.out[0x809f855] 
./test.out[0x804fbc0] 
./test.out[0x804f9bb] 
./test.out[0x80502bb] 
./test.out[0x805084e] 
./test.out[0x8050d07] 
/lib/libc.so.6(__libc_start_main+0xdc)[0x508e8c] 
./test.out[0x8049981] 
======= Memory map: ======== 
004f3000-00631000 r-xp 00000000 08:01 6148422 /lib/libc-2.5.so 
00631000-00633000 r-xp 0013e000 08:01 6148422 /lib/libc-2.5.so 
00633000-00634000 rwxp 00140000 08:01 6148422 /lib/libc-2.5.so 
00634000-00637000 rwxp 00634000 00:00 0 
0078d000-007a7000 r-xp 00000000 08:01 6152013 /lib/ld-2.5.so 
007a7000-007a8000 r-xp 00019000 08:01 6152013 /lib/ld-2.5.so 
007a8000-007a9000 rwxp 0001a000 08:01 6152013 /lib/ld-2.5.so 
007f9000-0081e000 r-xp 00000000 08:01 6148435 /lib/libm-2.5.so 
0081e000-0081f000 r-xp 00024000 08:01 6148435 /lib/libm-2.5.so 
0081f000-00820000 rwxp 00025000 08:01 6148435 /lib/libm-2.5.so 
00b18000-00b23000 r-xp 00000000 08:01 6148439 /lib/libgcc_s-4.1.2-20080825.so.1 
00b23000-00b24000 rwxp 0000a000 08:01 6148439 /lib/libgcc_s-4.1.2-20080825.so.1 
08048000-080c6000 r-xp 00000000 00:1e 736543  /users/guest10/shashi/Demo/src/test.out 
080c6000-080c7000 rwxp 0007e000 00:1e 736543  /users/guest10/shashi/Demo/src/test.out 
080c7000-080cc000 rwxp 080c7000 00:00 0 
08d05000-218b1000 rwxp 08d05000 00:00 0   [heap] 
b7e00000-b7e21000 rwxp b7e00000 00:00 0 
b7e21000-b7f00000 ---p b7e21000 00:00 0 
b7fab000-b7fac000 rwxp b7fab000 00:00 0 
b7fc4000-b7fc7000 rwxp b7fc4000 00:00 0 
b7fc7000-b7fc8000 r-xp b7fc7000 00:00 0   [vdso] 
bfb0b000-bfb21000 rw-p bffe9000 00:00 0   [stack] 
Abort 

請幫助..在進階

+0

我對glibc的堆調試瞭解不多,但是......使用'-g'編譯時,堆棧會更好嗎?如果你這樣做並在'gdb'下運行它? – asveikau 2011-05-30 11:19:25

回答

4

如果你告訴我們的代碼只能提供精確解感謝。但是錯誤很明顯。該代碼釋放了不是或不再有效的內存。這意味着要麼地址是錯誤的,因爲例如在原始指針上進行指針算術。或者指針已經釋放(雙倍空閒)。

+2

雙免費通常被glibc檢測爲「雙免費」的確.. – vines 2011-05-30 11:18:25

3

您很可能正在嘗試free未動態分配的內存。也許你有一個不必要的free或像這樣的錯字:free(&buf)而不是free(buf)

-g標誌編譯程序並通過debuggermemory debugger運行。這會告訴你發生錯誤的地方。

2

它看起來像你試圖freeinvalid pointer。您可以使用內存檢查程序一樣[Valgrind][1]像這樣運行程序:

valgrind --tool=memcheck --leak-check=full --track-origins=yes --show-reachable=yes --log-file=val.log ./<executable> <parameters> 

val.log,你應該能夠你的內存泄漏發生在哪裏弄清楚。此外,您可以嘗試使用gdb/ddd (debuggers)逐步完成代碼。該程序將在出現segmentation fault的地方失敗。要使代碼debuggable,您需要用-g標誌重新編譯您的代碼。

或者,您可以在此處發佈您的代碼,並讓社區瞭解您要出錯的位置。

+0

@ ALL:非常感謝大家.. – newars 2011-05-30 12:40:31

+0

@newars:你能解決問題嗎? – Sriram 2011-05-30 20:13:46