如何在下面的程序中消除分段错误

时间:2018-06-29 06:43:56

标签: c

我是编程的初学者。什么是细分错误,以及如何在以下程序中删除该错误?

以下是在hackerrank中询问的三胞胎问题的比较。尝试运行程序时收到分段错误。

int main() {
    int a, b, c;
    c = points(a, b);
    printf("%d", c);
    return 0;
}

int points(int a[10], int b[10]) {
    int p = 0, q = 0;

    for (int i = 0; i < 3; i++) {
        printf("%d", a[i]);
        scanf("%d", & a[i]);
    }
    for (int j = 0; j < 3; j++) {

        printf("%d", b[j]);
        scanf("%d", & b[j]);

    }
    for (int k = 0; k < 3; k++) {
        if (a[k] > b[k]) {
            ++p;
            return p;
        } else {
            if (a[k] = b[k])
                ++q;
            return q;
        }

    }
    return 0;
}

1 个答案:

答案 0 :(得分:3)

int a,b,c;
c=points(a,b);

您正在将参数传递给函数而未设置其值。请记住,在C语言中,您是按值将参数传递给函数。

 int points(int a[10],int b[10])

此函数需要两个十个整数的数组。每个变量只传递一个整数。

您还应该阅读有关将数组参数传递给函数的信息(如果您打算这样做)。在C语言中,除非将整个数组包装为结构,否则无法将其传递给函数。您应该只传递第一个数组元素的地址,并以某种方式定义大小。例如:

#define ARRAY_SIZE 10
int foo(int tab[])
{
  int i;
  for (i = 0; i < ARRAY_SIZE; i++)
    tab[i] = do_stuff();
}

int main(void)
{
  int tab[ARRAY_SIZE];
  foo(tab);
}

您也不能定义ARRAY_SIZE宏,而是将另一个参数传递给将定义所传递数组大小的函数。