首页 > 解决方案 > 我在判断问题的正确输出时遇到运行时错误

问题描述

我试图在在线法官中提交一个问题,给出 5 个数字,并希望我确定输入的数字是否以 1 为增量连续我测试了我的代码并且它运行正常,但在提交它以判断时似乎出现运行时错误. 这是我的代码:

#include <stdio.h>

int main(){

int a[5];
int m,i,k;

for (m=0; m<5; m++){
scanf("%d", &a[m]);
}

int b[5];
int c[5];
for (i=0; i<5; i++){
  for (k=0; k<5; k++){
    if (a[i] < a[k]){
    ++c[i];
    }
  }

}
int j, d[5];
int length = 4;

for (j = 0; j<5; j++){
  d[j] = length - c[j];

}
int e[5],l,p;


for(l=0; l<5; l++){
  e[d[l]] = a[l];
}



if (e[1] - e[0] == 1){
  if(e[2] - e[1] == 1){
    if(e[3] - e[2] == 1){
      if(e[4]- e[3] == 1){
        printf("a straight\n");
      }
      else printf("not a straight\n");
    }
    else printf("not a straight\n");
  }
  else printf("not a straight\n");
}
else printf("not a straight\n");

return 0;
}

我知道它很长,而且我找到了一个较短的代码,但我很想知道为什么这段代码会收到运行时错误。

标签: cfor-loopruntime-error

解决方案


您的问题在于这两行:

int b[5];
int c[5];

数组b并且默认情况下c不填充0s (它们通常填充非常随机的值),这会导致意外行为。

on 出现该segfaulte[d[l]] = a[l];是因为您正在索引e其中有 5 ints 的空间,其索引可能比4因为ds 值取决于c可能非常大的 s 值大得多:d[j] = length - c[j];

要解决此问题,您可以使用以下命令更改这两行:

int b[5] = {0};
int c[5] = {0};

因为这用s初始化a和。b0


推荐阅读