5

如果我在堆栈上使用 bitset,我可以执行以下操作:

std::bitset<8> bset_s;
bset_s.flip(1);

std::cout << "Bitset on stack: " << bset_s << std::endl;
std::cout << "Element 1: " << bset_s[1] << std::endl;

输出:

Bitset on stack: 00000010
Element 1: 1

但是当我尝试在堆上分配位集时:

std::bitset<8> * bset;
bset = new std::bitset<8>;

bset->flip(1);


std::cout << "Bitset on heap: " << * bset << std::endl;
std::cout << "Element 1: " << bset[1] << std::endl;

输出:

Bitset on heap: 00000010
Element 1: 00000000

如果我尝试访问第二个位,我会得到一个空的 Bitset 而不是“1”。我究竟做错了什么?

4

1 回答 1

9

bset[1]相当于*(bset + 1)asbset是一个指针。这是取消引用您不拥有的内存,因此程序的行为是未定义的。

你需要(*bset)[1].

于 2020-08-20T15:36:07.587 回答