如何解决此代码?我不能为n
输入超过100000的值,但是我已将其声明为long long int
。
我试图解决它,但是没有解决。请告诉我怎么了。
#include<stdio.h>
void main() {
long int n;
scanf("%ld",&n);
unsigned long long int a[n];
unsigned long long int max[n];
for(unsigned long long int i=0;i<n;i++) {
scanf("%lld",&a[i]);
}
for(unsigned long long int i=0;i<n;i++) {
unsigned long long int count=0;
for(unsigned long long int j=0;j<n;j++) {
if(a[i]==a[j]) {
count++;
}
}
max[i]=count;
}
for(unsigned long long int i=1;i<n;i++) {
if(max[0]<max[i]) {
max[0]=max[i];
a[0]=a[i];
}
else if(max[0]==max[i]) {
if(a[0]>a[i]) {
a[0]=a[i];
}
}
}
printf("%lld",a[0]);
}
答案 0 :(得分:3)
您要在堆栈上声明太大的变量:
unsigned long long int a[n];
unsigned long long int max[n];
这些变量在函数main
中声明为局部变量,这意味着在大多数实现中,它们都位于堆栈中。堆栈通常没有那么大,因此当您为n
指定较大的值时,它会在堆栈上创建太大的数组,从而导致堆栈溢出并导致段错误。
不是在堆栈上创建数组,而是使用malloc
在堆上创建它们:
unsigned long long int *a = malloc(n * sizeof(*a));
unsigned long long int *max = malloc(n * sizeof(*a));
此外,请确保检查malloc
的返回值并在完成后调用free
。