首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在判断问题的正确输出时,我得到一个运行时错误

问在判断问题的正确输出时,我得到一个运行时错误
EN

Stack Overflow用户
提问于 2020-11-14 17:25:40
回答 1查看 34关注 0票数 0

我试图在一个在线判断中提交一个问题,给出了5个数字,并希望我通过来确定输入的数字是否是连续的,我测试了我的代码,它运行正常,但在提交给判断时似乎会出现一个运行时错误。这是我的代码:

代码语言:javascript
复制
#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;
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-14 17:49:31

你的问题在于这两句话:

代码语言:javascript
复制
int b[5];
int c[5];

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

segfault on出现在行e[d[l]] = a[l];,因为您正在索引到e,它有5int的空间,其索引可能比4大得多,因为d的值依赖于c的值,这可能非常大:d[j] = length - c[j];。

要解决这个问题,可以用以下方法更改这两行:

代码语言:javascript
复制
int b[5] = {0};
int c[5] = {0};

因为这会用a和b来初始化0。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64836603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档