OSDN Git Service

[Fix] 一部の魔法で smart_learn が正常に機能していない
authorHabu <habu1010+github@gmail.com>
Fri, 17 Jun 2022 09:10:23 +0000 (18:10 +0900)
committerHabu <habu1010+github@gmail.com>
Fri, 17 Jun 2022 09:10:23 +0000 (18:10 +0900)
commitf053937c8f4583ed3a004bcea954bcdec1d5d1f1
tree6c3a214ed9c32bdc947e98eb357c40ad89d31839
parent10a4a441534310302efdfa2ec5ed093c8bc089a7
[Fix] 一部の魔法で smart_learn が正常に機能していない

言語仕様により std::initializer_list はコピーした時にリストの値自体のコピーはしない
いわゆるシャローコピーである事が規定されている。
そのため、MSpellDrsDataのコンストラクタが終了した時に引数drsに構築されたリストの値を
保持する領域は解放されており、コンストラクタで生成したラムダ式にコピーキャプチャした
std::initializer_list が指しているリストの値の領域は不正な領域となる。
結果として update_smart_learn の引数が想定していないものとなり、 smart_learn が
正常に機能しない。
ラムダ式にキャプチャする時に std::vector オブジェクトに初期化キャプチャすることで
この問題を回避するように修正する。
src/mspell/mspell-data.cpp