私はベクトルcpatches
を空ではなく、少なくとも1つのオブジェクトcv::Point3i(0,0,0)
を含んでいます。以下は、セグメント化エラーを与える私のコードです。コードは、r2 = objects.front().y
に達するまで完全に正常に動作し、セグメント化エラーが発生し、コードが中止されます。C++でのベクトルのセグメンテーションエラー
cv::Point3i(0,0,0)
で区切られたオブジェクトをobjects
という別のベクターに分離しようとしています。並べ替えでは、compare_row
とcompare_col
が問題なく動作します。 (それぞれa.y > b.y
とa.z > b.z
を返します)
コードは以下のとおりです。
for (int i = 0; i < cpatches.size(); i++) {
cv::Point3i npoint = cpatches[i];
std::vector<cv::Point3i> objects;
std::cout << npoint << std::endl;
if (npoint.x != 1 && npoint.y != 1 && npoint.z != 1) {
objects.push_back(npoint);
} else {
std::sort(objects.begin(), objects.end(), compare_row);
int r1, r2, c1, c2;
r2 = objects.front().y;
r1 = objects.back().y;
std::sort(objects.begin(), objects.end(), compare_col);
c2 = objects.front().y;
c1 = objects.back().y;
cv::rectangle(display_obstacles, cv::Point(r1, c1), cv::Point(r2, c2), CV_RGB(0, 255, 0));
std::cout << "hhh" << r1 << ", " << c1 << "; " << r2 << ", " << c2 << "; ";
objects.clear();
}
}
ベクターの最初の要素と最後の要素を呼び出すときにどのようなエラーが発生したのか確認できますか?
に
:これを防止する一つの簡単な方法は、行を変更することです'オブジェクト '。 – BeyelerStudios
'cpatches'の最初の' npoint'がelse分岐する場合はどうなりますか? 'objects'は空になり、' objects.front() 'ではsegfaultになります。 – mirt