我程序中的分段错误

时间:2016-06-14 10:49:14

标签: c segmentation-fault

我的排序程序导致“分段错误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;
}

现在我查了一下互联网,发现它是因为变量的值超出了系统的内存限制而引起的。但无法理解这个概念。

3 个答案:

答案 0 :(得分:3)

   for (i=0;i<n;i++)
   {
      if (sort[i]<sort[i-1])

你正在从它的界限中访问数组。也许你想从1开始你的循环。同时

   k=i-2;
   while (sort[k]>sort[i])

将访问超出0的索引,例如i012

答案 1 :(得分:3)

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

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

  4. 这会导致sort[k]的行为未定义

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

答案 2 :(得分:1)

除了之前所说的所有内容:

       c=i;
       for (c=i;c>k;c++){
          sort[c-1]=sort[c];
       }
       sort[k]=x;  
  1. i可以是0 - &gt; c可以是0 - &gt; sort[c-1]也会导致访问数组越界。
  2. 无需初始化c=i两次。在loop-declaration
  3. 中完成它就足够了