程序在SPOJ上显示SEGMENTATION错误,尽管在PC上正常运行?

时间:2013-10-02 22:28:44

标签: c

http://www.spoj.com/problems/PRIME1/ 当我在SPOJ上运行它时,该程序显示SEGMENTATION错误,但它在我的PC上运行正常(即代码块),那里有缺陷?

#include<stdio.h>
int main()
{
    int t,m,n,fl=0;
    int i,j,q,w;
    scanf("%d",&t);
    int arr[t];
    for(i=0;i<2*t;++i)
    {
        scanf("%d",&arr[i]);
    }
    for(i=0;i<t*2;i+=2)
    {

        n=arr[i];m=arr[i+1];
        if(n==1)++n;
        for(j=n;j<=m;++j)
        {
            q=j;
            for(w=2;w<q;++w)
            {
                if(q%w==0){fl=1;break;}
            }
            if(fl==0){printf("%d",q);printf("\n");}
            fl=0;
        }
        printf("\n");
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

您创建一个大小为t的数组,但随后使用索引最多2*t。您可能应该首先使用尺寸2*t创建它。

int arr[2*t];

您可以通过在valgrind或类似工具下运行程序来捕获这些类型的错误。

答案 1 :(得分:0)

此代码错误:

int arr[t];
for(i=0;i<2*t;++i)
{
    scanf("%d",&arr[i]);
}

您创建一个大小为t的数组,然后将2*t个元素放入其中。 KABOOM。你的代码也可能有其他错误 - 那只是跳出来的。