[英]Segmentation fault in my program
我的排序程序导致“分段错误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;
}
现在,我查找了Internet,并发现这是由于变量的值超过了系统的内存限制而引起的。 但是无法理解这个概念。
for (i=0;i<n;i++)
{
if (sort[i]<sort[i-1])
您正在访问数组的范围之外。也许您想从1
开始循环。
k=i-2;
while (sort[k]>sort[i])
例如,如果i
为0
或1
或2
它将访问大于0
索引
k = i - 2;
对于i
低值,看起来不稳定。
当i
为零时, sort[i - 1]
未定义 。
事物导致sort[k]
的行为未定义 。
故事的寓意:在尝试检索数组元素之前,请检查所有数组索引。 您的调试器将在这里为您提供帮助。
除了之前所说的全部:
c=i;
for (c=i;c>k;c++){
sort[c-1]=sort[c];
}
sort[k]=x;
i
可以是0
> c
可以是0
> sort[c-1]
也将导致访问数组超出范围。 c=i
两次。 在循环声明中做就足够了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.