c - 如何在C中修复“程序以信号SIGBUS终止,总线错误”
问题描述
我在 HackerRank 上遇到了这个问题,名为“Equalize the Array”, https: //www.hackerrank.com/challenges/equality-in-a-array/problem
我已经完成了这个程序,它在我的编译器上运行正常,但是当我在 HackerRank 网站上使用相同的代码时,它无法运行。它向我显示了这个错误
GDB trace:
Reading symbols from solution...done.
[New LWP 4647]
Core was generated by `solution'.
Program terminated with signal SIGBUS, Bus error.
#0 0x00005581998066b0 in main () at solution.c:15
15 scanf("%ld",&arr[i]);
#0 0x00005581998066b0 in main () at solution.c:15
我的代码是:-
#include<stdio.h>
int main()
{
long int arr[100];
long int n,i,j;
long int larg=0, largno=0;
scanf("%d",&n);
long int iarr[n];
long int max=0;
long int out=0,fout=0;
for(i=0;i<n;i++)
{
scanf("%ld",&arr[i]);
}
for(j=0;j<n;j++)
{
max=0;
for(i=0;i<n;i++)
{
if(arr[j]==arr[i])
{
max++;
}
}
iarr[j]=max;
}
for(j=0;j<n;j++)
{
if(larg < iarr[j])
{
larg = iarr[j];
largno = j;
}
}
for(i=0;i<n;i++)
{
if(arr[largno]==arr[i])
{
out++;
}
}
fout=n-out;
printf("%ld",fout);
}
请帮我解决这个问题:)
解决方案
您需要验证它n
是否在 [1, 99] 范围内。
scanf("%d", &n)
需要 aint
并且你通过 a long
。
验证您的格式字符串,检查返回值是否有错误,并确保这些值在可接受的范围内。
总是用 编译你的代码-Wall -Wextra
,这些也会报告格式字符串和参数类型不匹配。
推荐阅读
- r - 尝试 ggplot 时 R 4.1.0 崩溃
- python - 在 3D MatplotLib Scatterplot 中绘制超平面
- java - 如何在 Eclipse 中从 rubenlagus 导入 Telegram Bot API
- r - 根据对 Shiny 中上一个菜单的响应显示不同的选择菜单
- mysql - 如何返回第二个表中为空的客户和附加信息
- windows - OpenSSL 致命错误 LNK1112:模块机器类型“x86”与目标机器类型“x64”冲突
- amazon-web-services - AWS S3如何将文件夹设为今天的日期
- powershell - 在读取 CSV 和输出 TXT 文件的 PowerShell 脚本中需要我的错误/遗漏的 ID
- python-3.x - 为什么 python asyncio 代码卡在第一个并发任务上?
- r - 如何使用`officer`在powerpoint中设置对象的边框颜色?