我定义了一个具有cv :: Mat数据成员的类。然后在类方法中,我希望以某种方式修改此矩阵(更改值,添加行/列等)。
但是,我一直收到分段错误错误(我将错误放在底部)。
我想过使用cv :: Mat&引用而不是cv :: Mat作为类的数据成员,但随后它变得“杂乱”,因为它们必须被初始化。
我怀疑我必须以某种方式使用智能指针,但我的背景更多是C而不是C ++。
如果有人可以一步一步解释,我会非常感激。谢谢。
//Header file
class A
{
public:
A();
void do_something();
private:
cv::Mat data;
}
//Source code file
#include "A.h"
A::A():data(cv::Mat()){}
void A::do_something()
{
cv::Mat tmp(2,2,CV_32FC1, cv::Scalar(6));
data = tmp;
//also other mehtods fail like
//data = tmp.clone();
//data.push_back(2);
}
我得到的分段错误错误:
使用data =(到其他矩阵)时
编程接收信号SIGSEGV,分段故障。 xv :: Mat :: release(this = 0x0)中的0x00000000004051cc /opt/ros/hydro/include/opencv2/core/mat.hpp:366 if(refcount&&&& CV_XADD(refcount,-1)== 1)
当我使用例如:data.push_back(value)
时编程接收信号SIGSEGV,分段故障。 cv :: Mat :: push_back中的0x00000000004056cf(this = 0x0,elem = @ 0x7fffffffdb2c:6)at /opt/ros/hydro/include/opencv2/core/mat.hpp:684 if(!data)
答案 0 :(得分:1)
首先,感谢所有回复的人的帮助;他们让我以某种方式注意到我的错误。并道歉,因为它非常愚蠢。
问题在于我在test.cpp中的main函数中,我声明了一个指向A类的指针,但我没有用'new'命令初始化它。所以我猜数据cv :: Mat没有正确初始化导致分段错误。
//test.cpp
#include "A.h"
int main()
{
A* a;
//a = new A(); //this line was missing in my program
a->do_something();
return 0;
}