我试图在一个在线判断中提交一个问题,给出了5个数字,并希望我通过来确定输入的数字是否是连续的,我测试了我的代码,它运行正常,但在提交给判断时似乎会出现一个运行时错误。这是我的代码:
#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;
}我知道它很长,而且我发现了一个更短的代码,但是我很想知道为什么这个代码会收到一个运行时错误。
发布于 2020-11-14 17:49:31
你的问题在于这两句话:
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];。
要解决这个问题,可以用以下方法更改这两行:
int b[5] = {0};
int c[5] = {0};因为这会用a和b来初始化0。
https://stackoverflow.com/questions/64836603
复制相似问题