2011-05-12 46 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