私はこのコードを持っています:
for (std::vector<Marker>::iterator it = markers.begin(); it != markers.end(); ++it) {
if (it->getDots().size() < 3) {
markers.erase(it);
}
}
テスト入力の 1 つ (アプリが画像分析を行う) で、segfault が発生します。コードをデバッグしようとしましたが (役に立たなかった)、1 つのことに気付きました。gdbに尋ねると、p markers.size()
受け取り$9 = 3
ます。したがって、ループが 3 回繰り返されることを期待しますが、驚くべきことに、それは (少なくとも) 5 回繰り返されます。5回目の反復では、セグメンテーション違反があります。また、エラーの原因は*it
(here )の逆参照ではないことにも気付きました。it->
具体的it->getDots()
には、単純なゲッターです。
私はめったにC++で書いていないので、単純な間違いかもしれませんが、デバッグもグーグルも解決策をもたらしませんでした。手伝ってくれる?
さまざまな異なる入力 (わずかに異なる画像) でこの関数が適切に機能することを強調したいので、バグを追跡するのはさらに困難です。