我目前正在运行x86。在进行了新的安装和更新之后,我按照“学习C艰难之路”教程中的说明安装了Valearch3.8.1。但是,我可以运行Valgrind,而不是在代码中给出错误的行号,它只会给出如下内容:
==9300== by 0x4060714: (below main) (libc-start.c:227)完整的价值报告在这里:http://pastebin.com/1spmkFrU
我确信我使用的是-g标志,使用--track-origins=yes只会告诉我错误函数是从哪里开始的,而不是函数中错误的位置。(这是使用--track:http://pastebin.com/ktvY8HEM的结果)
下面是我试图使用的makefile和代码:
Makefile:
CFLAGS=-Wall -g
EXECUTABLES=ex1 ex3 ex4
all: $(EXECUTABLES)
clean:
rm -f $(EXECUTABLES)代码:
#include <stdio.h>
/*This program is purposefully broken */
int main()
{
int age = 10;
int height;
printf("I am %d years old.\n");
printf("I am %d inches tall.\n", height);
return 0;
}发布于 2012-11-29 06:23:21
main()的堆栈分配语义有点奇怪。尝试将错误的代码放入另一个函数中,从main()调用它,您可能会得到更有意义的结果。
更重要的是,尝试将-Wall和-O添加到CFLAGS中。未使用的变量和printf()的误用都可以在编译时检测到。
发布于 2013-05-09 13:26:33
在练习8的同一篇教程中,这种情况发生在我身上。即使启用了跟踪功能,Val差伦也没有发现访问非法地址的线路。
看起来,对于程序来说不是致命的错误,但是包括访问非法地址的内存的错误,并不是瓦兰的“固定”错误。您可以在这里更多地了解这些信息:瓦莱尔文件摘录
我想瓦伦奇不会让你从你记忆中的错误地方中解脱出来,所以我们必须格外小心。
https://stackoverflow.com/questions/13619782
复制相似问题