记录一个关于扩容的未明确定义行为

代码遇到一个无法赋值的问题

//FNodeGroupIndex t = AllocateEightNodes(CurBound, CurNode);
//Nodes[CurNode].ChildIndex = t;
Nodes[CurNode].ChildIndex = AllocateEightNodes(CurBound, CurNode);

必须按注释写法保存临时变量再赋值。原因是AllocateEightNodes里面对Nodes数组Push导致扩容了。但是按照一般想法赋值语句先做右边再做左边,查看汇编发现先算的左边地址然后再调用AllocateEightNodes,开启O2优化就会这样。又去用std::vector试了一下也是关闭O2就正常,开启O2就不行了,估计是个未定义行为。

CC BY-NC-SA 4.0 Deed | 署名-非商业性使用-相同方式共享
最后更新时间:2024-12-17 16:52:57