我定义了一个类,它有一个cv::Mat数据成员。然后在类方法中,我希望以某种方式修改这个矩阵(更改值、添加行/列等)。
然而,我一直收到一个Segmentation Fault错误(我将把错误放在底部)。
我考虑过使用cv::Mat&reference而不是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);
}
我得到的分段故障错误:
当使用数据=(对某些其他矩阵)
程序接收到信号SIGSEGV,分段故障。在
的cv::Mat::release(this=0x0)中0x00000000004051cc/opt/ros/hydro/include/opencv2/core/mat.hpp:366如果(refcount&CV_XADD(refcount,-1)==1)当我使用例如:data.push_back(value)时
程序接收到信号SIGSEGV,分段故障。在cv::Mat::push_back中0x00000000004056cf(this=0x0,elem=@0x7fffffdb2c:6)/opt/ros/hydro/include/opencv2/core/mat.hpp:684如果(!data)
首先,感谢所有回复者的帮助;他们不知怎么地让我注意到了自己的错误。还有道歉,因为这太愚蠢了。
问题是,在test.cpp的主函数中,我声明了一个指向类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;
}