C中扫描long long int时的分段错误

时间:2017-04-05 08:07:10

标签: c segmentation-fault long-long

我正在尝试编写一个简单的程序来计算两个数字的公共因子的数量。我在扫描第二个数字时发生了分段故障(核心转储)。我不明白故障在哪里?

#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;
}

1 个答案:

答案 0 :(得分:3)

我怀疑你的输入是一个真正的大数字(编辑:你在评论中确认了它)。调用堆栈的大小相当有限,声明一个巨大的可变长度数组很容易使其溢出。

int *com = malloc(sizeof *com * t); 替换为以下内容:

for: www.example.com => www.example.com/home.php
RewriteRule ^/$   home.php [NC,QSA,L]

www.example.com/john => www.example.com/user.php?nickname=john
RewriteRule ^/([A-Za-z]+)/$ user.php?nickname=$1 [QSA,L]

or if you want specific

RewriteRule ^john/$ user.php?nickname=$1 [QSA,L]

当你完成时,不要忘记释放它。