[STL位集移位运算符导致分段错误

问题描述 投票:2回答:1

请考虑以下代码:

#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)

所以请解释为什么该问题在某些计算机上无法重现?

c++ stl segmentation-fault bitset
1个回答
3
投票

原始代码很可能导致堆栈溢出:该位集可能使用数百兆的内存,而系统通常默认为几兆的堆栈大小。

© www.soinside.com 2019 - 2024. All rights reserved.