我目前有一个非常奇怪的问题,其中以下代码行为不端:
std::set<int> simpleSet;
for( int i=0; i<10; ++i )
simpleSet.insert( i );
是的,它实际上只是插入(或放置相同的结果)某些东西。无论如何,直到i = 6一切都很好,但在插入7时,该套装从
开始Locals
i 7 int
simpleSet <7 items> std::set<int, std::less<int>, std::allocator<int> >
[0] 0 int
[1] 1 int
[2] 2 int
[3] 3 int
[4] 4 int
[5] 5 int
[6] 6 int
到
Locals
i 8 int
simpleSet <8 items> std::set<int, std::less<int>, std::allocator<int> >
[0] 0 int
[1] 1 int
[2] 2 int
[3] 1 int
[4] 2 int
[5] 1 int
[6] 2 int
[7] 1 int
调试器中的。这可以与其他数据类型和随机值一起重现。始终在插入第8个元素时,所有先前的元素都会更改。由于某种原因,插入更多只会在集合中添加更多的1和2。并且在新的存储桶中。
我使用glibc 2.26版和gcc 7.2.0或clang 4.0.1在Linux上工作(两者都产生同样的问题)。
编辑:这是QtCreator(可能还有其他IDE)中调试数据可视化工具的问题。将set的内容写入stdout时,会打印正确的值。