gpt4 book ai didi

C++ : Segmentation fault (core dumped) issue

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:29 31 4
gpt4 key购买 nike

实现Sieve of eratosthenes在 C++ 中:

当我运行我的 C++ 程序时,我得到

"Segmentation fault (core dumped)"

它编译没有任何错误。

在这个程序中,我试图打印两个数字 a 和 b 之间的所有素数。

#include <iostream>
#include <string.h>
#define MAX 1000000

using namespace std;

// Print all primes s.t. a <= prime <= b
int main()
{
int t; // no of test cases
cin>>t;

bool prime[MAX + 1]; // a[i] = true for i = prime
long int count_primes_lte_me[MAX + 1]; // a[i] = Count ( primes ) <= i
long int counter_of_visited_primes;

prime[0] = prime[1] = false;
for(int i = 2 ; i <= MAX ; i++)
{
if(prime[i] == true)
count_primes_lte_me[i] = ++counter_of_visited_primes;

for(int j = i*i ; j <= MAX ; j += i) // sieve of eratosthenes
prime[j] = false;
}

long int a , b;
while(t--)
{
cin>>a>>b;
cout<<count_primes_lte_me[b] - count_primes_lte_me[a - 1]<<endl;
}

return 0;
}

最佳答案

尝试使用较小的 MAX 值。在堆栈上分配如此巨大的数组会产生(初始)问题。然后替换为动态分配:

bool *prime = new bool[MAX+1];
if (prime==nullptr) // error

...

delete [] prime;

您也可以使用静态分配(将您的变量定义为全局变量)。

最好使用一些合适的容器,例如 bitset

注意 i*i 可能会溢出,因此可能会出现其他问题...

关于C++ : Segmentation fault (core dumped) issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48841875/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com