如何在C中修复'程序终止于信号SIGBUS,总线错误'

时间:2019-01-12 15:29:00

标签: c gcc

我在HackerRank上名为“ Equalize 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);

}

请帮助我解决这个问题:)

1 个答案:

答案 0 :(得分:2)

您需要验证n的范围是[1,99]。

scanf("%d", &n)需要int,而您传递的是long

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

始终使用-Wall -Wextra编译代码,这些代码还会报告格式字符串和参数类型不匹配。