2011-05-12 62 views
1

我得到一個錯誤的malloc:我需要幫助時,我跑我的代碼來定位我的malloc錯誤

*** glibc detected *** ./bin/mem: malloc(): memory corruption (fast): 0x000000001951fbd0 *** 
======= Backtrace: ========= 
/lib64/libc.so.6[0x300ac739ac] 
/lib64/libc.so.6(__libc_malloc+0x6e)[0x300ac74cde] 
/usr/lib64/libstdc++.so.6(_Znwm+0x1d)[0x2af278cad1dd] 
./bin/mem[0x40835a] 
./bin/mem[0x40837e] 
./bin/mem[0x408a86] 
./bin/mem[0x405a99] 
./bin/mem[0x406148] 
./bin/mem[0x42b719] 
./bin/mem[0x409a89] 
./bin/mem[0x40a522] 
./bin/mem[0x40c2d3] 
./bin/mem(__gxx_personality_v0+0x2cd)[0x40190d] 
./bin/mem(__gxx_personality_v0+0x320)[0x401960] 
./bin/mem[0x437f06] 
======= Memory map: ======== 
00400000-00450000 r-xp 00000000 00:17 4160547       /users/avityo/code/mem/src/bin/mem 
0064f000-00650000 rw-p 0004f000 00:17 4160547       /users/avityo/code/mem/src/bin/mem 
18c1a000-19680000 rw-p 18c1a000 00:00 0         [heap] 
300a800000-300a81c000 r-xp 00000000 08:01 3833879      /lib64/ld-2.5.so 
300aa1b000-300aa1c000 r--p 0001b000 08:01 3833879      /lib64/ld-2.5.so 
300aa1c000-300aa1d000 rw-p 0001c000 08:01 3833879      /lib64/ld-2.5.so 
300ac00000-300ad4e000 r-xp 00000000 08:01 3833881      /lib64/libc-2.5.so 
300ad4e000-300af4d000 ---p 0014e000 08:01 3833881      /lib64/libc-2.5.so 
300af4d000-300af51000 r--p 0014d000 08:01 3833881      /lib64/libc-2.5.so 
300af51000-300af52000 rw-p 00151000 08:01 3833881      /lib64/libc-2.5.so 
300af52000-300af57000 rw-p 300af52000 00:00 0 
300b000000-300b082000 r-xp 00000000 08:01 3834072      /lib64/libm-2.5.so 
300b082000-300b281000 ---p 00082000 08:01 3834072      /lib64/libm-2.5.so 
300b281000-300b282000 r--p 00081000 08:01 3834072      /lib64/libm-2.5.so 
300b282000-300b283000 rw-p 00082000 08:01 3834072      /lib64/libm-2.5.so 
2af278bbc000-2af278bbd000 rw-p 2af278bbc000 00:00 0 
2af278bef000-2af278bf0000 rw-p 2af278bef000 00:00 0 
2af278bf0000-2af278cd6000 r-xp 00000000 08:01 76257864     /usr/lib64/libstdc++.so.6.0.8 
2af278cd6000-2af278ed5000 ---p 000e6000 08:01 76257864     /usr/lib64/libstdc++.so.6.0.8 
2af278ed5000-2af278edb000 r--p 000e5000 08:01 76257864     /usr/lib64/libstdc++.so.6.0.8 
2af278edb000-2af278ede000 rw-p 000eb000 08:01 76257864     /usr/lib64/libstdc++.so.6.0.8 
2af278ede000-2af278ef0000 rw-p 2af278ede000 00:00 0 
2af278ef0000-2af278efd000 r-xp 00000000 08:01 3833890     /lib64/libgcc_s-4.1.2-20080825.so.1 
2af278efd000-2af2790fd000 ---p 0000d000 08:01 3833890     /lib64/libgcc_s-4.1.2-20080825.so.1 
2af2790fd000-2af2790fe000 rw-p 0000d000 08:01 3833890     /lib64/libgcc_s-4.1.2-20080825.so.1 
2af2790fe000-2af27915e000 rw-p 2af2790fe000 00:00 0 
2af27c000000-2af27c021000 rw-p 2af27c000000 00:00 0 
2af27c021000-2af280000000 ---p 2af27c021000 00:00 0 
7fff2740b000-7fff27420000 rw-p 7ffffffea000 00:00 0      [stack] 
ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0     [vdso] 
./run: line 6: 2339 Aborted     ./bin/mem 

我找不到這個錯誤背後的邏輯,它並不總是發生。如何當我遍歷通常爲空的向量列表時,這個錯誤總是出現。我如何理解這一點?

編輯: 我想我找到了。我有一個數據結構(bbPair)和我創建了一個指針:

bbPair * p; 

但我沒有new初始化。難道是因爲內存超出了以前的運行,malloc錯誤是隨機的嗎?

+4

您認真期待我們診斷您的錯誤?也許編程不適合你的職業選擇。 – 2011-05-12 19:19:05

+1

發佈無論你在'std :: vector'上循環的代碼,我們都可以幫助診斷它。 – 2011-05-12 19:23:40

+1

我們可能無法直接回答這個問題,但從這裏我們可以推薦到可以用來幫助解決問題的方法。 – 2011-05-12 22:47:36

回答

4

如果您在Linux或Max OS X上,valgrind對定位這些錯誤的來源是非常有用的。如果您在Windows上,請參閱this answer

+0

如果Windows:http://stackoverflow.com/questions/413477/is-there-a-good-valgrind-substitute-for-windows – holtavolt 2011-05-12 19:20:57