2011-10-28 37 views
0

我刚刚开始使用C编程(随着'C艰难的方式') - 任何时候我尝试运行valgrind我在终端分段错误C语言:Valgrind的分段错误

I've installed and reinstalled valgrind

此处有任何建议吗?

+0

您是否说您的示例程序在通过valgrind运行时是segfaulting还是valgrind本身是segfaulting? – Dusty

+1

当你在valgrind之外运行它时,你是否编程segfault? –

+0

那么,程序运行良好。它只是当我valgrind,我会得到分段错误。如果我只输入valgrind,它也会显示分段错误。 –

回答

1

Valgrind绝对不应该错误 - 每一个(甚至是越野车)程序都应该运行并且拦截问题。

如果即使对于valgrind true这样的无害命令,我们也会为您的操作系统下载预编译的valgrind二进制文件,大概是与其包管理器一起下载的。编译有时会发生类似的问题(可能是编译器中的错误,源和编译器之间的不兼容性,坏的库......)。如果你还在学习,你可能不想深究这一点。

如果valgrind仅报告程序中的段错误,请发布其消息。这意味着你的程序中有一个错误。

+0

Valgrind也是如此。我应该删除所有对valgrind的引用(如果是这样,他们在哪里?)或者只是再次运行预编译包? –

+1

尝试在运行'sudo make install'的目录中运行'sudo make uninstall'。如果这不起作用,请在'/ usr/local'下找到新创建的文件并将其删除(尝试'find/usr/local -newer .')。除非你从源代码安装了其他东西,否则你可能会删除'/ usr/local'中的所有内容。然后在你的发行版的包管理器中安装'valgrind'。 –

0

哪个程序是SEGV错误,valgrind本身还是您自己的程序?

如果是您的程序,您可以在启用调试(即在Linux上使用gcc -g)的情况下编译它,然后在调试器(Linux上的gdb)中运行它。

如果它是valgrind本身,因为你是一个新手,你是不吉利的,但你仍然可以用传统方式调试你的程序(使用gdb)。使用gdbdocumented here

+0

我忘了提醒你也可以使用Boehm的垃圾收集器来避免大量的内存泄漏(使用GC_MALLOC而不是malloc等) –

+0

我可以通过终端运行gdb - 而且是,新手在这里。 –

+0

是的,gdb可以在终端中运行。阅读它的文档,在使用之前不要忘记使用-g标志重新编译。 –