分区算法运行时错误。有人可以帮我找到错误吗?

时间:2016-01-20 11:57:03

标签: c arrays algorithm partition

我在C中编写了一个数组分区算法,但它给出了错误“segment fault:core dumped”。 这是代码:

#include <stdio.h>

int main(void){
int n;
printf("insert array width\n");
scanf("%d", &n);
--n;
int A[n];
int i,j,p;
int x,t;

//inserimento valori array
printf("insert values\n");
for (i=0; i<=n; ++i){
scanf("%d", &A[i]);
}

printf("the array A is:\n");
for (i=0; i<=n; ++i){
    printf("%d ", A[i]);
}
printf("\n");

这是实际的分区算法,当然问题就在这里。

printf("insert the pivot value\n");
scanf("%d", &x);
i=0;
j=n;
while (i<j && A[i]<=x){
    ++i;
    }
while (i<j && A[j]>x){
    ++j;
    }
if (A[j]>x) {
    --j;
    }
while (i<j){
    t=A[i];
    A[i]=A[j];
    A[j]=t;
    ++i;
    ++j;
    while (A[i]<=x){
        ++i;
        }
    while (A[j]>x){
        ++j;
        }
    }
p=j;

printf("the result of the operation is:\n");
for (i=0; i<=n; ++i){
    printf("%d ", A[i]);
}

return 0;
}

有人可以帮我找到它有什么问题吗?谢谢。

1 个答案:

答案 0 :(得分:0)

--n;
int A[n];

现在An-1个元素,但您仍然可以访问不存在的元素n。至少交换这两行,或保留原来的n值,因为它更多是C-ish(并运行循环直到i<n)。

while (i<j && A[j]>x){
    ++j;
    }

你应该减少j。 在其余的代码中你继续增加j,但我很确定你应该减少它。