【发布时间】:2015-01-19 19:26:16
【问题描述】:
我用 C 语言编写了这个程序,故意添加了一个错误。
程序计算用户输入的5个数字的总和,并将结果显示在屏幕上。
我用“gcc -Wall -Wextra -Werror -ansi -pedantic -g”编译它并且工作正常。
但它有一个错误。
在循环的最后一次重复中,程序计算 a[N],它没有定义!
我想知道如何使用 GDB 发现这种错误
当我使用“set check range on”时,我收到此消息“警告:当前范围检查设置与语言不匹配。”什么都没有发生...
这是要调试的代码:
#define N 5
#include <stdio.h>
void read(float*);
int main(void) {
float a[N], s;
int i;
printf("Enter %d numbers: ", N);
read(a);
i = -1;
s = 0;
while (i != N) {
i = i + 1;
s = s+a[i];
}
printf("The sum is : %.2f \n", s);
return 0;
}
void read(float*a) {
int n = 0;
while (n!=N) {
scanf("%f",&a[n]);
n++;
}
}
【问题讨论】:
-
我会给 valgrind 一个机会,听起来就像是钉子的锤子;)