向量下标超出范围错误 - C++ Vectors & Open CV

Posted

技术标签:

【中文标题】向量下标超出范围错误 - C++ Vectors & Open CV【英文标题】:Vector subscript out of range error - C++ Vectors & Open CV 【发布时间】:2016-06-16 10:30:34 【问题描述】:

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

我的计划:

#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;


构建成功,但是当我运行代码时,我得到了这个错误:

【问题讨论】:

【参考方案1】:

sizeof 会返回 type 的对象表示的字节大小,与当前对象无关,它是静态的和固定的。它不返回元素的数量,您可能会遇到超出范围的错误。

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

改变

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

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

顺便说一句:我建议你把参数从传值改为传引用,避免复制。

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

【讨论】:

生成的图像没有任何情节。我猜它仍在尝试绘制..图像卡住了.....这是由于线程问题吗?我应该创建线程吗? 这是一个不同的问题。你应该问一个不同的问题,清楚地说明问题。如果此答案对您有所帮助,请将其标记为已接受。 粘贴在我的问题中的代码将生成一个图像,该图像用我通过向量发送的坐标绘制。运行代码后,我得到了图像窗口,但上面没有绘图,并且图像被冻结。我什至无法关闭它。 @Ramanan 哦,我明白了。是的,正如 Ajay 所说,这是一个不同的问题,我建议您使用调试器检查代码的哪一部分导致问题。

以上是关于向量下标超出范围错误 - C++ Vectors & Open CV的主要内容,如果未能解决你的问题,请参考以下文章

向量下标超出范围 C++ 合并排序

调试断言失败,向量下标超出范围

C++ 调试断言失败。向量下标超出范围

向量下标超出范围opencv c++

错误向量下标超出范围

二维向量下标超出范围