请考虑以下代码:
#include <iostream>
#include <bitset>
using namespace std;
int main() {
const int N = 1e9;
bitset<N> st;
st << 999;
cout << st.test(0);
}
(注意,使用的是运算符<<
,而不是<<=
。我需要的是<<
。也不要删除cout
行,因为那样就不会出现SegFault。我相信是因为编译器优化)。
这会导致我的机器出现分段错误。但是,将999更改为1后,不会引发异常。问题是什么,引发了什么类型的异常,如何解决它?
另一个奇怪的是,该代码可在某些计算机(包括ideone服务器)上运行。但是,不是我的:
gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2)
所以请解释为什么该问题在某些计算机上无法重现?
原始代码很可能导致堆栈溢出:该位集可能使用数百兆的内存,而系统通常默认为几兆的堆栈大小。