Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
windfall-shogi opened this issue Apr 2, 2023 · 2 comments
Closed

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

windfall-shogi opened this issue Apr 2, 2023 · 2 comments

Comments

@windfall-shogi
Copy link

result.clear();
result.reserve(num);
for (ChildNumType i = 0; i < num; ++i)
{
auto& child = root_node->child[i];
Move m = child.move;
// move_count == 0であって欲しくはないのだが…。
float win = child.move_count == 0 ? child.nnrate : (float)child.win / child.move_count;
// result.emplace_back(std::pair<Move, float>(m, win));
result[i] = std::pair<Move, float>(m, win);
}

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

@yaneurao
Copy link
Owner

yaneurao commented May 3, 2023

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

@yaneurao yaneurao closed this as completed May 3, 2023
@yaneurao
Copy link
Owner

yaneurao commented May 3, 2023

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

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

しかし気持ち悪いので修正しました。ご指摘ありがとうございました。
9f6284f

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants