2

私はこのコードを持っています:

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++で書いていないので、単純な間違いかもしれませんが、デバッグもグーグルも解決策をもたらしませんでした。手伝ってくれる?

さまざまな異なる入力 (わずかに異なる画像) でこの関数が適切に機能することを強調したいので、バグを追跡するのはさらに困難です。

4

3 に答える 3