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::vectorcv::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);