Closed windfall-shogi closed 1 year ago
それ、377行目でreserve()してます。事前に必要な要素数分を確保することによって、emplace_back()でvectorの自動拡張(これはallocしなおしになる)が行われるのを防止してるんです。
ああ、reserveではなくresizeと書くべきということですね。うっかりしてました。
ただ、reserveと書いてもend()が違うだけで配列の要素はメモリ上にリニアに確保されてますんで、問題なく書き込めますし(bounds checkerみたいなので警告はでるかも)、コンストラクタとデストラクタが呼び出されないだけっすね。今回の場合、この構造体にデストラクタは存在しないので問題ナッシングという…。
しかし気持ち悪いので修正しました。ご指摘ありがとうございました。 https://github.com/yaneurao/YaneuraOu/commit/9f6284fdac0b39d43f44db6c7e0cfc76091b3428
https://github.com/yaneurao/YaneuraOu/blob/599378d420fa9a8cdae9b1b816615313d41ccf6e/source/engine/dlshogi-engine/YaneuraOu_dlshogi_bridge.cpp#L376-L387
386行目では要素数が更新されないので、バグと思われる。 385行目をコメントアウトしているので、何か意図があるようにも思うがわからない。