代码片段1:我自己的代码,调用了opencv里的函数
cv::Size sz(3, 3);
std::cout << "sz: " << &sz << std::endl;
GaussianBlur(frame, frame, sz, 0, 0);
代码片段2:opencv4.5.3源码,其中有我自定义的部分
void GaussianBlur(InputArray _src, OutputArray _dst, Size ksize,
double sigma1, double sigma2,
int borderType)
{
CV_INSTRUMENT_REGION();
std::cout << "ksize: " << &ksize << std::endl;
CV_Assert(!_src.empty());
int type = _src.type();
Size size = _src.size();
_dst.create( size, type );
if( (borderType & ~BORDER_ISOLATED) != BORDER_CONSTANT &&
((borderType & BORDER_ISOLATED) != 0 || !_src.getMat().isSubmatrix()) )
{
if( size.height == 1 )
ksize.height = 1;
if( size.width == 1 )
ksize.width = 1;
}
.....
}
编译器:arm-linux-gnueabi-g++
交叉编译生成了opencv的静态库,然后编译自己的代码生成可执行文件
在板端执行后的打印:

可以看到,GaussianBlur函数内ksize的地址变为了0x3,这个地址是不对的,后面调用ksize时直接就段错误了。
GaussianBlur函数的参数Size是值传递,按理说不应该发生段错误,现在找不到原因。
虽然可改opencv源码来解决,但是还是想知道为什么会这样,请教大家,谢谢。