c - 如何确定 valgrind 中哪些值未初始化?

标签 c valgrind

这可能看起来是一个愚蠢的问题,但 valgrind 默认情况下不会为您提供足够的信息。 Valgrind 报告如下:

==2541== Conditional jump or move depends on uninitialised value(s)
==2541==    at 0x401777: process_read.clone.3 (in /home/matt/dev/ocs/client3/a.out)
==2541==    by 0x4026B8: obbs_main (in /home/matt/dev/ocs/client3/client)
==2541==    by 0x53D1D8B: start_thread (pthread_create.c:304)
==2541==    by 0x511D04C: clone (clone.S:112)

我看不到任何明显的东西。 Valgrind -v 也没有帮助。

有没有办法让 valgrind 告诉我哪些值未初始化?

最佳答案

如果您在 valgrind 中使用 --track-origins=yes 标志,它会告诉您首次分配未初始化内存的行号(假设您使用 -g 进行编译)。这通常位于函数开头某处的堆栈分配处。

也尝试使用 -Wall 进行编译。 -Wall 应该在编译时捕获大多数“使用未初始化”错误。

关于c - 如何确定 valgrind 中哪些值未初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8736645/

相关文章:

c - 我一定是在某处使用 recv( ) 从 TCP 套接字接收数据时遇到了缓冲区限制

c - scanf(...) != EOF 的有用上下文

valgrind - helgrind 报告一场没有冲突的比赛 - 这意味着什么?

c - 内存未释放但仍可访问,是否泄漏?

c++ - Valgrind 下 Mac OS 上的 std::thread.join() SIGSEGV

c - Valgrind/内存错误

c - 将三维数组传递给 C 中的函数

c - fopen 文件名错误

c - Readdir/closedir - Valgrind 显示 "invalid read"

c++ - 在 C++ 中优化 IO