向量下标超出范围错误 - C ++ Vectors&打开简历

时间:2016-06-16 10:30:35

标签: c++ opencv vector

我正在编写一个程序,它将收集一些坐标并将它们推入一个向量,最后将这些向量发送到一个函数,该函数将创建一个图像并绘制这些向量中存在的点。

我的计划:

#include<opencv\cv.h>
#include<opencv\highgui.h>
#include<iostream>
#include<vector>
using namespace cv;
using namespace std;


void image_creator(vector<float>  jump_xx, vector<float>  jump_yy, vector<float>  mark_xx, vector<float>  mark_yy)
{

    Mat image_creator(Size(500, 500), CV_8UC3);

    for (int i = 0; i < sizeof(jump_xx); i++)
    {
        line(image_creator, Point(jump_xx[i], jump_yy[i]), Point(mark_xx[i], mark_yy[i]), Scalar(155, 122, 155), 4, 2, 0);
        waitKey(0);
    }
    namedWindow("Slice_Viewer1", CV_WINDOW_FREERATIO);
    imshow("Slice_Viewer1", image_creator);

}

int main()
{
    vector<float> jump_x;
    vector<float> jump_y;
    vector<float> mark_x;
    vector<float> mark_y;

    int x, y, a, b;
    int choice;

    jump_x.push_back(0.0);
    jump_y.push_back(0.0);

    mark_x.push_back(0.0);
    mark_y.push_back(10.0);

    jump_x.push_back(10.0);
    jump_y.push_back(0.0);

    mark_x.push_back(10.0);
    mark_y.push_back(10.0);

    image_creator(jump_x, jump_y, mark_x, mark_y);

    return 0;

}

构建成功但是当我运行代码时,我收到此错误:

enter image description here

1 个答案:

答案 0 :(得分:2)

sizeof将返回类型的对象表示的字节大小,它与当前对象无关,并且它是静态的和固定的。它没有返回元素的数量,你可能会得到一个出界的错误。

您应该使用std::vector::size()

更改

for (int i = 0; i < sizeof(jump_xx); i++)

for (int i = 0; i < jump_xx.size(); i++)

BTW:我建议你将参数从传递值改为传递const引用,以避免复制。

void image_creator(const vector<float>& jump_xx, const vector<float>& jump_yy, const vector<float>& mark_xx, const vector<float>& mark_yy)