首页 > 解决方案 > 如何在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);

}

请帮我解决这个问题:)

标签: cgcc

解决方案


您需要验证它n是否在 [1, 99] 范围内。

scanf("%d", &n)需要 aint并且你通过 a long

验证您的格式字符串,检查返回值是否有错误,并确保这些值在可接受的范围内。

总是用 编译你的代码-Wall -Wextra,这些也会报告格式字符串和参数类型不匹配。


推荐阅读