c++ opencv终端报 段错误 (核心已转储) GDB调试cv::Mat::~Mat()
问题描述
在使用运行基于opencv的c++程序时,终端出现了段错误 (核心已转储)
不停注释后运行测试后,程序中一旦调用某个函数就会报错,将该函数注释后就能正常运行。
最后将函数内部代码全部注释,同样调用就会报错。
原因
通过GDB调试发现最后出错位置为cv::Mat::release(),cv::Mat::~Mat(),当函数的返回值为cv::Mat,但函数中没有返回mat,函数执行结束后可能要对返回的Mat析构,所以造成的空指针问题。
实验
定义三个函数,其中printage返回值为Mat
Mat printage(void)
{
cout<<"age : " <<mage<<endl;
}
void printsex(void)
{
cout<<"sex : " <<msex<<endl;
}
void printinfo()
{
printage();
printsex();
}
在main中调用printinfo后输出结果:
age : 6
段错误
在printage函数中添加返回Mat
Mat printage(void)
{
Mat img;
cout<<"age : " <<mage<<endl;
return img;
}
输出结果:
age : 6
sex : man