我正在努力学习C并且正在阅读关于valgrind的文章。我有一个简单的C程序,如下所示,当我运行valgrind时,它会抱怨
条件跳转或移动取决于未初始化的值
by 0x100000F50:main(ex5.c:9)
== 4338 ==未初始化的值是由堆栈分配创建的 == 4338 ==在0x1001F5BF8:__ vfprintf(在/usr/lib/system/libsystem_c.dylib中)
#include <stdio.h>
/* This is a comment. */
int main(int argc, char *argv[])
{
int distance = 100;
// this is also a comment
printf("You are %d miles away.\n", distance);
return 0;
}
错误来自哪里?
答案 0 :(得分:3)
库函数的某些实现通常是为了最有效地绕过valgrind将要检查的一些规则
请注意错误位于__vfprintf (in /usr/lib/system/libsystem_c.dylib)
这并不总是一个问题。如果没有副作用(即使库可以有bug)我也会忽略它
Vagrind经常压制无害的图书馆警告,升级可能包含这个警告
答案 1 :(得分:2)
我在这段代码中没有看到任何问题。没关系。检查已安装的valgrind
本身的完整性。有时,valgrind
可能会从喜欢的库中的代码发出警告(误报,正如我们所说),这些代码不属于您的代码的一部分,而且主要是您无法控制的关注。
尝试使用valgrind
的其他(更新)版本检查代码。
顺便说一句,如果您不打算使用命令行参数,可以将main()
缩减为
int main(void)
{ ....
答案 2 :(得分:0)
使用valgrind 3.10测试的代码不会抱怨任何内容。在许多情况下,valgrind升级将解决问题(通过包管理器或如果不可用,那么建立自己也应该很容易)。我使用gcc 4.9.4构建代码。