这是查找一些素数的(不完整)代码。
#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/