gpt4 book ai didi

c++ - 从函数返回 vector 给出 "vector subscript out of range"错误

转载 作者:行者123 更新时间:2023-11-28 04:15:16 30 4
gpt4 key购买 nike

我正在尝试从 calculate_markerVectors 函数返回 vector 并将其复制到 pose 但我一直遇到“vector 下标超出范围”错误。

我可以尝试通过引用返回,但我更想知道我在使用这种函数返回时做错了什么。

返回值由 3 个 double 类型的元素组成。以下是部分代码:

cv::Point2d pt(1,1);
bool new_Point = false;

int prog(){
vector<vector<cv::Point2f>> markerCorners;
//.....
if (new_Point == true) {
vector <double> pose = calculate_markerVectors(markerCorners, pt); // HERE ERROR OCCURS
cout << "MARKER POSE" << pose[0] << "," << pose[1] << endl;
}
//.....
}

vector <double> calculate_markerVectors(vector<vector<cv::Point2f>> corners, cv::Point2d clickPt)
{

//some calulation happens here

cv::Point2f S;
S.x = corners[0][2].x - (vec_AC[0] / 2);
S.y = corners[0][2].y - (vec_AC[1] / 2);
double theta = acos(dot_prod / (scalarSF*scalarST));

vector <double> pos_img;
pos_img.push_back(S.x);
pos_img.push_back(S.y);
pos_img.push_back(theta);

return pos_img;
}

最佳答案

对于这种情况,您应该使用调试器。

我找不到您的代码有任何逻辑错误。但是在使用 vector 时,您应该始终检查是否正在访问超出 vector 大小的索引。

在这种情况下,我会检查 corners.size() > 0corners[0].size() >= 2 vec_AC.size() >= 1。执行此操作后,您应该可以保证 pos_img 将被正确填充或根本不会被填充。

接下来,在访问 pose 之前,我会检查是否 pose.size() >= 1 在访问 pose[0]姿势[1]

正确地进行这些检查将完全避免 vector 下标超出范围错误,并且还将帮助您追查为什么 markerCorners 没有达到您期望的大小。

关于c++ - 从函数返回 vector 给出 "vector subscript out of range"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56794191/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com