在std::vector中压入std::pair时出错
Error while pushing a std::pair in std::vector
我发现在
Template < class a, class b >
std::vector < std::pair < a, b > >::push_back(...)
几乎总是产生分段错误。
我看了一下,发现stl_uninitialized.h
(第269行)出现了一个错误。
我发现最简单的工作是为矢量保留所需的/一些大空间,然后进行推回。它起作用了,但我不相信。为什么会出现错误
(我的初始代码甚至没有模板化。它的字段是
std::pair < float, cv::RotatedRect >
我在这里模板,让人们能够给出通用的答案)。
localDetections声明:
std::向量& lt;std::向量& lt;std::一对& lt;float, cv::RotatedRect>>>localDetections;localDetections.resize (m_allSizes.size ());
其中m_allSizes是一个no的向量。将用于搜索和填充的大小。for条件也是:
for (int = 0;坐& lt;m_allSizes.size ();坐+ +){
使用位置:
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到localdetections的大小。
您的代码中有一个潜在的错误,sit
可能溢出为负数。你可能想要将sit
转换为vector::size_type
,或者只是使用迭代器,或者push_back
向量到localDetections上作为循环的一部分,而不是事先调整大小。
或者,当您试图复制或分配cv::RotatedRect oupRect
时,可能会发生一些不好的事情。
这件事有很多未知之处。张贴的代码没有明显的错误。调试器比StackOverflow更有帮助。
您需要首先为locaDetections分配内存,使用localDetections。调整大小之类的
localDetections需要至少包含sit在调用之前分配的位置:
localDetections[sit].push_back(newPair);
- c++:在switch中使用std::pair的可能性
- 将从std::映射中获取的std::pair引用传递给接受std::对引用的函数
- Hash for a std::pair, for use in an unordered_map
- 类模板的参数太少 "std::pair":在函数中将 std 对作为参数传递
- 接收std :: Pair作为参数并从支撑列表初始化中推论的模板函数
- std::pair中的template-template参数
- std::experimental::ostream_joiner and std::pair
- 如何将两个std :: vector结合到一个std :: vector与std :: pair
- 错误 C2678:二进制'==':找不到采用 'std::pair<const _Kty,_Ty>' 型左操作数的运算符
- C++错误处理-使用std::pair或std::tuple返回错误代码和函数返回的缺点
- 将std::pair转换为具有任意数量元素的std::tuple
- 宏MOCK_METHOD传递了3个参数,但std::pair只接受了2个错误
- push_back std::pair into std::vector error
- 如何返回std::pair的内容
- 谷歌模拟成员函数中的std::pair参数编译失败
- 无法正确地向java绑定公开std::pair
- std::pair抱怨类型不完整
- std::pair的默认构造函数<>将基本类型(int等)设置为零
- Emplacing a std::pair
- 创建一个以std::pair为键的std::unordered_map