【发布时间】:2016-06-26 18:05:43
【问题描述】:
我正在逐块编写代码,并尝试在此过程中使用指针算法。我的代码调用一个函数,然后假设向用户询问 8 个数字。然后使用指针将数字存储到数组中。我的问题是我遇到了分段错误。我相信这个问题与我的指针和地址有关。我认为导致此问题的代码块是scanf("%lf", *(coeff+1));。这是引发故障的区域吗?如果是,有什么方法可以解决这个问题?
#include <stdio.h>
void get_poly(double *coeff){
int p;
printf("Enter the eight coefficients: ");
for(p = 0; p < 7; p++){
scanf("%lf", *(coeff+1));
}
}
int main(void){
int i;
double coeff[7];
get_poly(coeff);
printf("output");
for(i = 0; i < 7; i++){
printf("%lf",coeff[i]);
}
return 0;
}
【问题讨论】:
-
代码中有多个问题。首先,您应该将地址传递给 scanf。在这里,您正在传递一个值。第二个缺陷在逻辑上。你总是传递第一个槽的地址(在你更正之前)。
-
scanf("%lf", *(coeff+1));-->scanf("%lf", coeff+p); -
开启编译器警告,通常使用
-Wall。他们准确地指出了问题所在。传入一个已经分配的指向get_poly的指针是不必要的复杂化。调用者需要进行分配并且需要知道get_poly将读取多少个数字。你最好让get_poly自己分配内存并返回double *。然后您可以使用参数来说明要读取多少个数字。
标签: c arrays function pointers