查找素数时出现运行时错误

Runtime error in finding prime numbers

Spoj 问题- http://www.spoj.com/problems/PRIME1/
代码中存在逻辑错误,未运行。
IDE-Codeblocks

int main()
{
    int t,*prime;
    long long int m,n,i,j;
    //t for number of test cases

    scanf("%d",&t);

    for(i=0;i<t;i++)
    {
        scanf("%llu%llu",&m,&n);
        prime=(int*)(malloc((n-m)*sizeof(int)));

        //Initialising all elements as 1 
        for(i=0;i<m;i++)
        {
            prime[i]=1;
        }

        prime[0]=0;
        prime[1]=0;

        //Initialising all the multiples of primes as 0 as in sieve algorithm
        for(i=m;i<n;i++)
        {
            if(prime[i]!=0){
                for(j=2;j*i<=1000000000;j++)
                {
                    prime[j*i]=0;
                }
            }
        }

        for(i=m;i<n;i++)
        {
            printf("%llu\n",i);
        }

        free(prime);
    }
    return 0;
}
scanf("%lld %lld",&m,&n);
prime=(int*)(malloc((n-m)*sizeof(int)))

您正在为 n-m 个元素分配内存,并且您正在尝试访问第 m 个到第 n-1 个超出限制访问的元素,这将导致未定义的行为因此你看到崩溃了。

在同一个循环中有类似的其他访问,所以你应该注意这个。

例如:

输入是 5 和 10,即 m=5n=10(格式说明符应该是 %lld for long long)

现在分配的内存是 5 个元素 prime[0]prime[4] .

在 for 循环中,您可以访问 i<n 在这种情况下,您将可以访问

prime[9] 这将导致崩溃,因为您正在访问一些不是您分配的内存

其他访问权限

prime[j*i] 如果 i=3 且 j=4 怎么办

您正在访问 prime[12]