Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我在spoj上的PRIME1中得到一个分段错误。我该如何根除它?_C++_Arrays_Primes_Sieve Of Eratosthenes - Fatal编程技术网

C++ 我在spoj上的PRIME1中得到一个分段错误。我该如何根除它?

C++ 我在spoj上的PRIME1中得到一个分段错误。我该如何根除它?,c++,arrays,primes,sieve-of-eratosthenes,C++,Arrays,Primes,Sieve Of Eratosthenes,我对这个问题的回答 请解释我哪里错了。我收到一个分割错误 这是: #include<cstdlib> #include<iostream> using namespace std; int main(int argc, char** argv) { int t=0,i=0,m=0,n=0; cin>>t; while(t--&&t<=10) { cin>>m>>n; if(m&g

我对这个问题的回答 请解释我哪里错了。我收到一个分割错误

这是:

    #include<cstdlib>
    #include<iostream>

using namespace std;

int main(int argc, char** argv) {
int t=0,i=0,m=0,n=0;
cin>>t;
while(t--&&t<=10)
{
    cin>>m>>n;
    if(m>=1&&n-m<=100000)
    {
    int prime[n];
    for(i=0;i<n;i++)
        prime[i]=1;
    for (int i=2; i*i<=n; i++)
    { 
    if (prime[i] == true)
    {
        for (int j=i*2; j<=n; j += i)
            prime[j] = false;
    }
    }

    for (int k=m+1; k<n; k++)
        if (prime[k])
            cout <<k<<endl;
    }
}
return 0;
}
#包括
#包括
使用名称空间std;
int main(int argc,字符**argv){
int t=0,i=0,m=0,n=0;
cin>>t;
而(t--&t>m>>n;
如果(m>=1&&n-m
for(int j=i*2;jm;
cin>>n;

如果(m>=1&&n-m
int prime[n];
可能太大,无法放入堆栈中。它应该类似于
char*prime=new char[n];
。使用后不要忘了
删除[]
它。(我不会将此作为答案发布,因为我没有通过提交来检查)
bool prime
可能会占用更少的空间。
std::vector
会占用更少的空间,但对SPOJ的性能影响不大。我不知道为什么会被否决。也许我需要上学……“\_(ツ)_/你正在使用VLA(<代码> int Prime[n];<代码> >代码> N>代码>不是一个常量表达式,它不是标准的C++,可能是(GCC做的)在堆栈中分配的。按照下面的建议,用@ MikeCAT或@ USER881301代替。我在Ubuntu 64位系统上尝试了代码,它工作了(没有分段错误,但我不确定逻辑)。,edit addedlogic很好。我在ideone上尝试了该代码。一切正常,但SPOj中出现了一个奇怪的分段错误:|
for (int j=i*2; j<=n; j += i)
prime[j] = false;
for(int j=i*2; j<n; ++j)
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char** argv) 
{
    int t=0,i=0,m=0,n=0;
    cin>>t;

    while(t--&&t<=10)
    {
        cin>>m;
        cin>>n;
        if(m>=1&&n-m<=100000)
        {
            int prime[n];

            for(i=0;i<n;i++)
            {
                prime[i]=1;
            }

            for (int i=2; i*i<=n; i++)
            { 
                if (prime[i] == true)
                {
                    for (int j=i*2; j<=n; j += i)
                    {
                        cout << "poopy\n";
                        prime[j] = false;
                    }
                }
            }

        for (int k=m+1; k<n; k++)
        {
            if (prime[k])
            {
                cout <<k<<endl;
            }
        }
        }
    }
    return 0;
}