我需要帮助来定位我的 malloc 错误

I need help to locate a my malloc error

本文关键字:我的 malloc 错误 定位 帮助      更新时间:2023-10-16

我在运行代码时收到 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 错误可能是随机的,因为以前运行留下的内存吗?

如果您使用的是 Linux 或 Max OS X,valgrind 对于定位这些错误的来源非常宝贵。如果您使用的是Windows,请参阅此答案。