分段故障核心转储

时间:2014-03-03 17:46:47

标签: c

#include <stdio.h>

void ScanArray (int* , int*);
int Pair (int* , int);

int main () {

        int a [15] , n;

        ScanArray (a , &n);

//      printf("\nHello World !!!\n");

        if(Pair(a , n) == 0)
                printf("The array fulfills the requirements");
        else
                printf("The array does not fulfills the requirements");

        return 0;
}

void ScanArray (int *a , int *n) {

        int i , f = 0;


        do {
        printf("Enter the number of integers : ");
        scanf("%d",n);

        if (*n > 15)
                printf("Enter number bellow 15 \n");
        else
                f=1;
        } while(f == 0);

        printf("Enter the %d integers : ",*n);
        for (i = 0 ; i < *n ; i++)
                scanf("%d",a+i);

}

int Pair (int *a , int n) {

        if (n <= 1)
                return 0;
        else
                if (*a-*(a+1) != 1 && *a-*(a+1) != -1)
                        return 1;
                else
                        return Pair(a++ , n--);

}

不知道为什么它不起作用。

分段错误(核心转储)。

1 个答案:

答案 0 :(得分:4)

else
    return Pair(a++ , n--);

使用postfix递增和递减运算符将导致递归调用处理相同的值。您应该使用前缀运算符,甚至更好,只需添加和减去1。

else
    return Pair(a + 1 , n - 1);

我说这样做更好,因为认为修改价值观是错误的;递归的关键是递归调用将拥有自己的an副本,因此在父级中修改它们对子级没有影响。