c - 我在判断问题的正确输出时遇到运行时错误
问题描述
我试图在在线法官中提交一个问题,给出 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;
}
我知道它很长,而且我找到了一个较短的代码,但我很想知道为什么这段代码会收到运行时错误。
解决方案
您的问题在于这两行:
int b[5];
int c[5];
数组b
并且默认情况下c
不填充0
s (它们通常填充非常随机的值),这会导致意外行为。
on 出现该segfault
行e[d[l]] = a[l];
是因为您正在索引e
其中有 5 int
s 的空间,其索引可能比4
因为d
s 值取决于c
可能非常大的 s 值大得多:d[j] = length - c[j];
。
要解决此问题,您可以使用以下命令更改这两行:
int b[5] = {0};
int c[5] = {0};
因为这用s初始化a
和。b
0
推荐阅读
- laravel - cURL 错误 28:操作在 10000 毫秒后超时
- apache-flink - Flink:在 CLI 上运行 flink 程序时出错
- sql - 同时进行两个 UPDATE 查询
- php - PHP - 优雅地提取数组 a 中不在数组 b 中的数字索引(不是 array_diff_key)
- python - 找不到 gunicorn 命令,但它在我的 requirements.txt 中
- django - 如何在 Django v3 中正确编写自定义用户模型和管理器?
- apollo - apollo 链接在 400 错误上重试的意外行为
- java - 对同一对象的多次引用
- rust - 从parking_lot::RwLock 返回映射数据
- php - 试图将数据传输到数据库但它们从 utf-8 变为 somting else