gdb调试出现这个错误.
这个一般是内存出现错误,我遇到的是,
class SuperPoint
{
public:
SuperPoint();
~SuperPoint();
int init();
int run(const cv::Mat &_image, cv::Mat& _score, cv::Mat& _des_uint8);
private:
unsigned char *load(const char *filename, int *model_size);
int dumpTensor(rknn_tensor_attr* _attr);
private:
unsigned char* m_pmodel = nullptr;
rknn_context m_rknn_context = -1;
rknn_input_output_num m_model_io_num;
rknn_tensor_attr m_model_input_attr[1];
rknn_tensor_attr m_model_output_attr[2];
}
SuperPoint::SuperPoint()
{
}
SuperPoint::~SuperPoint()
{
if(m_rknn_context >=0)
{
rknn_destroy(m_rknn_context);
}
if(m_pmodel != nullptr)
{
free(m_pmodel);
m_pmodel = nullptr;
}
}
main()
{
SuperPoint sp;
}
这个原因是析构函数,如果我把析构函数的内容全部屏蔽,则没有问题,如果不屏蔽,按理说两个变量我都赋值了,实际析构里面的内容也没有执行,不知道为什么就会出现内存错误。
最后我放弃了这样写,这样写构造函数没有东西,倒是写析构感觉不好,我又定义了一个函数,使用默认析构函数。
多线程调用同一个对象的方法或者类的静态方法,如果方法没有静态变量,全局变量,成员变量(即共用使用的内存)是没有问题的。123456