我有 C/C++ 代码,它给出了段错误。它是在 RH Linux Enterprise 服务器上使用 gcc/g++ 编译的。我在可执行文件上使用了 Valgrind 内存检查器:
valgrind --tool=memcheck --leak-check=full --show-reachable=yes
我将此作为 Valgrind 的输出消息之一:
==7053== Invalid read of size 1
==7053== at 0xDBC96C: func1 (file1:4742)
==7053== by 0xDB8769: func2 (file1.c:3478)
==7053== by 0xDB167E: func3 (file1.c:2032)
==7053== by 0xDB0378: func4 (file1.c:1542)
==7053== by 0xDB97D8: func5 (file1.c:3697)
==7053== by 0xDB17A7: func6 (file1.c:2120)
==7053== by 0xDBD55E: func7 (file2.c:271)
==7053== Address 0x1bcaf2f0 is not stack'd, malloc'd or (recently) free'd
我读到这意味着我的代码访问了不允许的无效内存位置。
我的问题:
我如何找出哪些缓冲区内存访问无效,以及上面的哪些函数已经做到了。
我如何使用地址0x1bcaf2f0,valgrind 说这个地址是无效的。如何在该地址找到符号(本质上是缓冲区名称)?内存映射文件,任何其他方式。
任何其他通用指针、valgrind 选项或其他用于使用 Valgrind 检测内存(堆/堆栈损坏)错误的工具?