繁体   English   中英

我程序中的细分错误

[英]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])

例如,如果i012它将访问大于0索引

  1. k = i - 2; 对于i低值,看起来不稳定。

  2. i为零时, sort[i - 1] 未定义

事物导致sort[k]的行为未定义

故事的寓意:在尝试检索数组元素之前,请检查所有数组索引。 您的调试器将在这里为您提供帮助。

除了之前所说的全部:

       c=i;
       for (c=i;c>k;c++){
          sort[c-1]=sort[c];
       }
       sort[k]=x;  
  1. i可以是0 > c可以是0 > sort[c-1]也将导致访问数组超出范围。
  2. 无需初始化c=i两次。 在循环声明中做就足够了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM