【问题标题】:Array Segmentation fault error in fibbonacci number program斐波那契数程序中的数组分段错误错误
【发布时间】:2014-03-22 15:24:25
【问题描述】:

我怀疑..它在 ideone 和我的 gcc 编译器上运行良好但是..codechef 给出了运行时错误..p 请帮忙

        #include<iostream>
        #include<cstdio>

        using namespace std;
       int main()
       {        
       //printf("thisis it");
            int i,n,t;
     long int a[200000],f[100008];

        f[0]=0;f[1]=1;
            for(i=1;i<200000;i++)
             a[i]=0;

             i=1;
                while(f[i]<=100000)
                   {
                    i++;
                f[i]=f[i-1]+f[i-2];
            a[f[i]]=1;
                   }
                scanf("%d",&t);
                while(t--)
                {
            scanf("%d",&n);
            if(a[n]==1)
            printf("Yes\n");
            else
                printf("No\n");
               }
    return 0;
               }

请帮助...为什么它在 codechef 上给出运行时错误...虽然一切都很好....

【问题讨论】:

  • 请正确构建您的代码并提供更多信息。
  • 肯定会出现堆栈溢出。为什么你不能给出逐字的错误信息?为什么不能使用调试器来收集信息。

标签: c++ arrays segmentation-fault fault


【解决方案1】:

我想这里有错误:

a[f[i]]=1;

即使是第 40 个斐波那契数 (102334155) 也会大于 200000,因此它将超出 a 的范围。

更新:抱歉,我没有注意到循环一直运行到 f[i]

这里另一个可能的问题是

if(a[n]==1)

你不要检查n是否小于a的大小,如果有人输入一个很大的数字,代码会产生一个段错误。

【讨论】:

    【解决方案2】:

    首先,你为什么只从第二个值初始化 a[] ? a[0] 应该是未初始化的?

    其次,您的问题似乎在于 a[f[i]]=1; 您对 f[i] 的值进行寻址,第 28 个值应该是 317811,它超过了一个大小。

    这段代码有些地方太复杂了,我建议修改一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 2010-11-07
      相关资源
      最近更新 更多