我的排序程序导致“分段错误11”:
#include <stdio.h>
int main()
{
// Asking user for number of inputs in an array
int n;
do {
printf ("enter the number of intigers you want to sort\n");
scanf("%d",&n);
}while (n<=1);
int sort [n];
printf ("please enter %d numbers\n",n);
for (int i=0; i<n; i++) {
scanf("%d",&sort[i]);
}
printf("you entered\n ");
for (int i=0; i<n; i++) {
printf(" %d ",sort[i]);
}
printf("\n");
int k,c,i,x;
for (i=0;i<n;i++) {
if (sort[i]<sort[i-1]){
k=i-2;
while (sort[k]>sort[i]){
k--;
}
k++;
x =sort[i];
c=i;
for (c=i;c>k;c++){
sort[c-1]=sort[c];
}
sort[k]=x;
}
}
printf ("Sorted numbers :-\n");
for (int i=0; i<n; i++) {
printf ("%d ",sort[i]);
}
printf ("\n");
return 0;
}
现在我查了一下互联网,发现它是因为变量的值超出了系统的内存限制而引起的。但无法理解这个概念。
答案 0 :(得分:3)
for (i=0;i<n;i++)
{
if (sort[i]<sort[i-1])
你正在从它的界限中访问数组。也许你想从1
开始你的循环。同时
k=i-2;
while (sort[k]>sort[i])
将访问超出0
的索引,例如i
为0
或1
或2
答案 1 :(得分:3)
k = i - 2;
对i
的低值看起来不稳定。
sort[i - 1]
为零时, i
未定义。
这会导致sort[k]
的行为未定义。
故事的道德:在尝试检索数组元素之前检查所有数组索引。您的调试器将在这里为您提供帮助。
答案 2 :(得分:1)
除了之前所说的所有内容:
c=i;
for (c=i;c>k;c++){
sort[c-1]=sort[c];
}
sort[k]=x;
i
可以是0
- &gt; c
可以是0
- &gt; sort[c-1]
也会导致访问数组越界。 c=i
两次。在loop-declaration