C ++:分段错误(核心转储)问题

杰伊·泰利(Jay Teli)

实施埃拉托色尼的筛在C ++:

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

“分段故障(核心已转储)”

它编译没有任何错误。

在此程序中,我试图打印两个数字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可能会溢出,因此其他可能出现问题...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

分段故障核心转储问题与C

C - 获取分段错误(核心转储)

分段错误(核心转储)C ++-指针

分段错误(核心转储)C++

C 中的分段错误(核心转储)

分段错误(核心转储)C

c分段核心转储?

如何修复C中的分段错误(核心转储)错误

C 程序错误 - 分段错误(核心转储)

分段错误:C中的核心转储错误

C编程分段错误(核心转储)错误

分段错误(核心转储) - C++ 错误

错误:分段错误,核心转储,在 c 编程中

使用C从核心转储获取导致分段错误的地址

在 C 程序中接收分段错误(核心转储)

C 中的分段错误(核心转储) - 使用 PTHREADS 时

在 C 程序上获取分段错误(核心转储)

使用 fscanf 时 C 中的分段错误(核心转储)

C++ 地图分段错误(核心转储)

分段错误(转储核心)C ++初学者

C程序中的分段错误(核心转储)以制作直方图

C 代码中的分段错误(核心转储)

如何在C中的CPU调度仿真程序中解决分段错误(核心转储)错误?

具有动态数组的C程序中的分段错误(核心转储)错误

如何在读取文件时修复 C++ 上的分段错误(核心转储)错误?

程序在c中的多行printf之后以分段错误(核心转储)结尾?

数组初始化中C中的分段错误(核心转储)

在 C、Linux 中递归列出目录和文件时出现分段错误(核心转储)

使用动态2D数组时的C ++分段错误(核心转储)