c++ - 在 std::vector 中推送 std::pair 时出错

标签 c++ vector stl std-pair

我发现在做一个推

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/

相关文章:

c++ - 头文件中内联自由函数的可移植性

c++ - 无法在 OpenGL 中获取矩形的 3D View

c++ - 使用不同的键搜索数据

c++ - STL const_iterator 转换——编译器差异

c++ - 在 C++ 中可以使用构造函数将 2D Vector 初始化为单行吗?

c++ - 从 32 位进程调用 64 位 dll 上的 LoadLibrary

c++ - 使用 Visual Studio 的调试器打印链接列表的内容

c++ - GNU C++ 无法创建常量自定义类实例的 vector

java - 如何使用 JScience 创建涉及 vector 的符号变量/函数?

haskell - Haskell 中向量的并行映射