std::vector
からオブジェクトを消去しようとするとアクセス違反が発生するラムダがあります。イテレータは正しいオブジェクトの実行時間を指していない可能性があるため、削除するオブジェクトのコピーをイテレータの代わりにラムダに渡します。ラムダからのアクセス違反がときどき発生します
ベクトルから特定のオブジェクトを削除するラムダを設定するより良い方法はありますか?そして、ここでアクセス違反の正確な原因は何ですか?このエラー時にデバッグすると、ローカル変数とオート変数がnull /壊れているのでデバッグが難しくなります。
... std::vector<CustomLayout> customLayouts; // private class member variable
void App::loadCustomLayouts() {
CustomLayout customLayout;
// ... create HWND
onMessage(WM_RBUTTONDOWN, [customLayout, this]() {
auto it = std::remove(customLayouts.begin(), customLayouts.end(), customLayout);
customLayouts.erase(it); // occasionally causes access violation
});
}
消去する前に 'it!= customLayouts.end()'をチェックしてみてください。そうであれば、 'customLayout'が' customLayouts'に見つかりませんでした。これは、あなたの問題の原因を手掛かりにするかもしれません。 – Mankarse