yaneurao / YaneuraOu

YaneuraOu is the World's Strongest Shogi engine(AI player) , WCSC29 1st winner , educational and USI compliant engine.
GNU General Public License v3.0
524 stars 140 forks source link

vectorの要素数が更新されないバグ #259

Closed windfall-shogi closed 1 year ago

windfall-shogi commented 1 year ago

https://github.com/yaneurao/YaneuraOu/blob/599378d420fa9a8cdae9b1b816615313d41ccf6e/source/engine/dlshogi-engine/YaneuraOu_dlshogi_bridge.cpp#L376-L387

386行目では要素数が更新されないので、バグと思われる。 385行目をコメントアウトしているので、何か意図があるようにも思うがわからない。

yaneurao commented 1 year ago

それ、377行目でreserve()してます。事前に必要な要素数分を確保することによって、emplace_back()でvectorの自動拡張(これはallocしなおしになる)が行われるのを防止してるんです。

yaneurao commented 1 year ago

ああ、reserveではなくresizeと書くべきということですね。うっかりしてました。

ただ、reserveと書いてもend()が違うだけで配列の要素はメモリ上にリニアに確保されてますんで、問題なく書き込めますし(bounds checkerみたいなので警告はでるかも)、コンストラクタとデストラクタが呼び出されないだけっすね。今回の場合、この構造体にデストラクタは存在しないので問題ナッシングという…。

しかし気持ち悪いので修正しました。ご指摘ありがとうございました。 https://github.com/yaneurao/YaneuraOu/commit/9f6284fdac0b39d43f44db6c7e0cfc76091b3428