如何在 C 中修复'Program terminated with signal SIGBUS, Bus error'



>我在HackerRank上有这个问题,名为"均衡数组",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)需要int,你通过一个long.

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

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

相关内容

最新更新