我发现在做一个推
Template < class a, class b >
std::vector < std::pair < a, b > >::push_back(...)
几乎总是会产生段错误。
我环顾四周,发现 STL_uninitialized.h
(第 269 行)引发了一个错误。
我发现最简单的解决方法是为 vector 保留所需的/一些大的空间,然后进行推回。它有效,但我不相信。为什么会报错
(我的初始代码甚至没有模板化。它与字段一起
std::pair < float, cv::RotatedRect >
我在这里制作了模板,以便人们能够给出通用的答案)。
localDetections 声明:
std::vector < std::vector < std::pair < float, cv::RotatedRect> > > localDetections; localDetections.resize(m_allSizes.size());
其中 m_allSizes 是第一个 vector 。将用于搜索和填充的大小。 for 条件也是:
for (int sit = 0 ; sit < m_allSizes.size(); sit++) {
使用地点:
cv::RotatedRect oupRect; cv::Point2d src_center(img.cols/2., img.rows/2.); rotateRectInSpace(newRect, oupRect, src_center, -(rotatedAngle)); std::pair<float, cv::RotatedRect> newPair((float)finval, oupRect); localDetections[sit].push_back(newPair);
sit 是 for 循环中的一个变量,从 0 到 localDectctions 的大小。
最佳答案
您的代码中存在潜在错误,sit
可能溢出为负数。您可能希望将 sit
转换为 vector::size_type
,或者只使用迭代器或 push_back
vector 作为循环的一部分到 localDetections预先调整大小。
或者,当您尝试复制或分配 cv::RotatedRect oupRect
时,可能会发生一些不好的事情。
关于这个有很多未知数。发布的代码没有明显的错误。调试器将提供比 StackOverflow 更大的帮助。
关于c++ - 在 std::vector 中推送 std::pair 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24438867/