c++ - 位集声明导致 SIGSEGV

标签 c++ segmentation-fault std-bitset

这是查找一些素数的(不完整)代码。

#include<iostream>
#include<bitset>
#include<cmath>

#define SQRT_10_POW_12 1000000llu
#define _10_POW_12_BY_2 1000000000000llu/2llu

using namespace std;

int main()
{
    unsigned int T;
    unsigned long long n;
    register unsigned int it1,it2;

    bitset<SQRT_10_POW_12+1llu> isprime;
    bitset<_10_POW_12_BY_2+1llu> nums;

    return 0;
}

程序在声明 isprime 时因 SIGSEGV 而崩溃。 问题是什么 ? 我该如何解决这个问题?

使用 Ubuntu 14.04,g++-4.8.1。

最佳答案

虽然生成的数组可能不是很大,但它驻留在堆栈中,堆栈的大小有限(并且依赖于平台)(例如 1MB 是常见的大小)。尝试使用 new 运算符创建对象,它将被放置在堆上。

关于c++ - 位集声明导致 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27335992/

相关文章:

c++ - 使用 Opencv 模糊矩形中的内容

C Strtok 段错误

c - 为什么在本地进程之间传递指针时会导致段错误?

由于输入数组尺寸过大,C 程序崩溃(段错误)。如何在不使用 static/global/malloc 的情况下防止它?

c++ - 更改 std::bitset 中一系列位值的最有效方法

c++ - 如何使用类型特征和概念检测指向算术类型的指针?

c++ - 安装 OpenGL AUX 库

c++ - 在构造函数中初始化静态数组 (C++)

c++ - 计算多个 std::bitset<N> 中出现 1 的最快方法?

c++ - 为什么 std::bitset 只支持整数数据类型?为什么不支持 float ?