为什么“学习C很难”的例子在valgrind中显示错误?

时间:2015-07-02 16:56:01

标签: c valgrind

我正在努力学习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;
}

错误来自哪里?

3 个答案:

答案 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构建代码。