Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在std::vector中推送std::对时出错_C++_Vector_Stl_Std Pair - Fatal编程技术网

C++ 在std::vector中推送std::对时出错

C++ 在std::vector中推送std::对时出错,c++,vector,stl,std-pair,C++,Vector,Stl,Std Pair,我发现我在做推拉动作 Template < class a, class b > std::vector < std::pair < a, b > >::push_back(...) 我在这里建立模板是为了让人们能够给出一般的答案) 本地检测声明: std::vector

我发现我在做推拉动作

Template < class a, class b > 
std::vector < std::pair < a, b > >::push_back(...)
我在这里建立模板是为了让人们能够给出一般的答案)

本地检测声明:

std::vector> 局部检测; localDetections.resize(m_allSizes.size())

其中m_allSizes是用于搜索和填充的大小数量的向量。此外,条件为:

对于(int-sit=0;sit 使用地点:

cv::RotatedRect组;
cv::Point2d src_中心(img.cols/2.,img.rows/2.);
旋转空间(新矩形、双矩形、src_中心,-(旋转角度));
std::pair newPair((float)finval,uprect);
localDetections[sit]。推回(新对);

sit是for循环中的一个变量,从0到localDetections的大小。

您需要首先使用localDetections.resize或类似的方法为localDetections分配内存

在调用之前,localDetections需要包含至少sit分配的位置:

localDetections[sit].push_back(newPair);

您的代码中存在一个潜在错误,
sit
可能会溢出为负数。您可能希望将
sit
转换为
vector::size\u type
,或者只使用迭代器,或者将
推回
向量作为循环的一部分,而不是预先调整大小

或者,当您尝试复制或分配
cv::RotatedRect-uprect
时,可能会发生一些不好的情况


这个问题有很多未知数。发布的代码没有明显的错误。调试器将比StackOverflow更有用。

很可能是你弄糟了复制或移动构造函数,导致了崩溃。保留空间只是意味着不需要长时间移动或复制对象,但并不能修复实际的错误问题。当你创建
对时,你能显示你的确切代码行吗?并尝试
推回
为什么你的代码中会出现错误
错误?请。你在哪里为
本地检测[sit]
分配元素?是的,我已经这样做了!localDetections.resize(m\u allSizes.size());不,我确保sit在正确的范围内。因此我非常确定那里没有问题。但是,是的,cv::RotatedRect可能是一个很大的原因,因为当我尝试将向量中的对推入向量(localDetections)时会发生错误。我也考虑过。见鬼,我甚至在RotatedRect上设置了条件,所以它不是空点,但即使这样也不起作用。我可能会在这一点上尝试valgrind。我认为这更像是一个动态内存问题。谢谢!
              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);
localDetections[sit].push_back(newPair);