首页 > 解决方案 > 以代码 139 退出(分段错误)

问题描述

程序编译正确,但是当我尝试输入任何数字时,它以错误代码 139 终止。问题可能出在第二个 for 循环上,因为我注释掉了整个子句并且一切正常。

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int t;
  scanf("%d", &t);
  int a[t], b[t];
  for(int i=0; i<t; i++)
  {
    scanf("%d%d", &a[i], &b[i]);
  }

  for(int i=0; i<t; i++)
  {
    int min = 0;
    while(a[i]!=b[i])
    {
      if(a[i]<b[i])
      {
        for(int j=a[i]; j<b[i]; j+=10)
        {
          if(b[i]-j>10)
          {
            min += 1;
            a[i] += j;
          } else
          {
            min += 1;
            a[i] = b[i];
          }
        }
      } else
      {
        for(int j=b[i]; j>a[i]; j-=10)
        {
          if(j-a[i]>10)
          {
            min += 1;
            a[i] -= j;
          } else
          {
            min += 1;
            a[i] = b[i];
          }
        }
      }
    }
    printf("%d\n", min);
  }
  return 0;
}

我还想指出,程序的相互编译显示“分段错误(核心转储)”或只是“分段错误”,这很奇怪。有时它不会显示任何错误,但无论如何仍然不接受输入。

编辑:现在当我为 a[i] 和 b[i] 输入第三个输入时,程序冻结。

标签: csegmentation-fault

解决方案


你没有改变a[i],也没有b[i]while循环内。假设您想在检查完数组的所有位置后退出,您应该引入此条件(将其更改为 for,更容易):

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int t;
  scanf("%d", &t);
  int a[t], b[t];
  for(int i=0; i<t; i++)
  {
    scanf("%d%d", &a[i], &b[i]);
  }

  for(int i=0; i<t; i++)
  {
    int min = 0;
    for(;a[i]!=b[i] && i<t;i++) //Here
    {
      if(a[i]<b[i])
      {
        for(int j=a[i]; j<b[i]; j+=10)
        {
          if(b[i]-j>10)
          {
            min += 1;
          }
        }
      } else
      {
        for(int j=b[i]; j>a[i]; j-=10)
        {
          if(j-a[i]>10)
          {
            min += 1;
          }
        }
      }
    }
    printf("%d\n", min);
  }
  return 0;
}

推荐阅读