0

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

#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;
}

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

使用 Ubuntu 14.04,g++-4.8.1。

4

1 回答 1

2

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

于 2014-12-06T20:17:54.703 回答