Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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++ 素数发生器中的sigabrt和sigsegv错误 #包括 #包括 #包括 使用名称空间std; int main() { int-n1; cin>>n1; 长整型最大值,n; 而(n1-) { 整数*素数=新整数[100000000]; //向量v[10000000]; //整数素数[100000]={1}; cin>>n; cin>>最大值; int i,j; 对于(i=2;i_C++ - Fatal编程技术网

C++ 素数发生器中的sigabrt和sigsegv错误 #包括 #包括 #包括 使用名称空间std; int main() { int-n1; cin>>n1; 长整型最大值,n; 而(n1-) { 整数*素数=新整数[100000000]; //向量v[10000000]; //整数素数[100000]={1}; cin>>n; cin>>最大值; int i,j; 对于(i=2;i

C++ 素数发生器中的sigabrt和sigsegv错误 #包括 #包括 #包括 使用名称空间std; int main() { int-n1; cin>>n1; 长整型最大值,n; 而(n1-) { 整数*素数=新整数[100000000]; //向量v[10000000]; //整数素数[100000]={1}; cin>>n; cin>>最大值; int i,j; 对于(i=2;i,c++,C++,而言,i*j的溢出可导致不正确的内存访问(负索引) 乘法的结果是整数。您应该将i和j转换为无符号长以下内容: #include<iostream> #include<cmath> #include<vector> using namespace std; int main() { int n1; cin>>n1; long long int MAX,n; while(n1--) { int* primes = new int[100000000

而言,
i*j
的溢出可导致不正确的内存访问(负索引)

乘法的结果是整数。您应该将
i
j
转换为
无符号长

以下内容:

#include<iostream>
#include<cmath>
#include<vector>
using namespace std;


int main()
{
int n1;
cin>>n1;
long long int MAX,n;
while(n1--)
{
int* primes = new int[1000000000];
//vector<int> v[10000000];
//int primes[100000]={1};
cin>>n;
cin>>MAX;      
   int i,j; 
   for(i=2;i<=MAX;i++) primes[i] = 1; 
   for(i=2;i<=(int)sqrt(MAX);i++)
   {
   // cout<<"primes[i]\t"<<i<<" "<<primes[i]<<endl;
     if (primes[i]) 
     {
       for(j=i;j*i<=MAX;j++)
       {
        primes[i*j] = 0;
       // cout<<"primes[i*j]\t"<<i*j<<" "<<primes[i*j]<<endl;;
    }
    }
}
       primes[0]=0;
       primes[1]=0; 
        for(int i=n;i<=MAX;i++)
        {
            if(primes[i])
            cout<<i<<" "<<endl;
        }
        delete[] primes;
}
cout<<endl;

}
将尝试分配4GB的RAM(假设
int
为32位)

在线法官会允许你的程序分配那么多内存吗?我怀疑

严格地说,每个元素只需要一位(因为它不是零就是一),所以剩余的31位(或分配的97%内存)被浪费了

int* primes = new int[1000000000];