在 C 中扫描 long long int 时出现分段错误
Segmentation fault in scanning long long int in C
我正在尝试编写一个简单的程序来计算两个的公因数 numbers.I 我遇到了扫描第二个时发生的分段错误(核心转储)number.I 没有明白错在哪里了吗?
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long int first,second,t,k;
long long int i,count=0;
scanf("%lld",&first);
scanf("%lld",&second);
//storing the lowest of two numbers in t
if(first<second){
t=first;
}
else{
t=second;
}
//initialising an array to be used as flags
int com[t];
for(i=0;i<t;i=i+1){
com[i]=1;
}
for(i=0;i<t;i=i+1){
if(com[i]==1){
if(first%(i+1)==0&&second%(i+1)==0){
count=count+1;
}
else{
for(k=2;k*(i+1)-1<t;k=k+1){
com[k*(i+1)-1]=0;
}
}
}
}
printf("%lld\n",count);
return 0;
}
我怀疑您输入的数字确实很大(编辑:您在评论中确认了这一点)。调用堆栈的大小相当有限,声明一个巨大的可变长度数组很容易溢出。
将 int com[t];
替换为以下内容:
int *com = malloc(sizeof *com * t);
当然,完成后别忘了释放它。
我正在尝试编写一个简单的程序来计算两个的公因数 numbers.I 我遇到了扫描第二个时发生的分段错误(核心转储)number.I 没有明白错在哪里了吗?
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long int first,second,t,k;
long long int i,count=0;
scanf("%lld",&first);
scanf("%lld",&second);
//storing the lowest of two numbers in t
if(first<second){
t=first;
}
else{
t=second;
}
//initialising an array to be used as flags
int com[t];
for(i=0;i<t;i=i+1){
com[i]=1;
}
for(i=0;i<t;i=i+1){
if(com[i]==1){
if(first%(i+1)==0&&second%(i+1)==0){
count=count+1;
}
else{
for(k=2;k*(i+1)-1<t;k=k+1){
com[k*(i+1)-1]=0;
}
}
}
}
printf("%lld\n",count);
return 0;
}
我怀疑您输入的数字确实很大(编辑:您在评论中确认了这一点)。调用堆栈的大小相当有限,声明一个巨大的可变长度数组很容易溢出。
将 int com[t];
替换为以下内容:
int *com = malloc(sizeof *com * t);
当然,完成后别忘了释放它。