我有一个非常奇怪(相当不可能)的问题与OpenCV的函数-指针传递给cvGetSize
,在cvGetSize
内部成为NULL
。我在CvGetSize
里面检查它们,它真的变成了NULL
。没有解引用,只是强制转换。
这怎么可能?(lang: C, compiler MSVC 2012)
我代码:#include <opencv2/core/core_c.h>
#include <opencv2/highgui/highgui_c.h>
void Test(IplImage * img)
{
CvArr * arr = (CvArr*)(img);
printf("img in test = %pn", (CvArr*)img);
cvGetSize(arr);
}
int main(int argc, char *argv[])
{
IplImage * img;
img = cvLoadImage("D:\fusion.jpeg",CV_LOAD_IMAGE_COLOR);
Test(img);
return 0;
}
cvGetSize
签名:
CV_IMPL CvSize cvGetSize( const CvArr* arr )
还添加了指向cvGetSize
的指针输出。
img in test = 000000B2F5536F80
img in cvGetSize = 000007F9058A8670
更新:如果我让这个例子是CPP文件,一切工作正常
实际上传递的指针不被视为const,比较:
const CvArr * arr ;
表示指向const
对象的指针。CvArr * const arr ;
表示const指针
你可以这样检查:
int x = 1 ;
int y = 2 ;
const int *p = &x ;
cout << *p ; // 1
p = &y ;
cout << *p << x << y ; // 212
const int * const pc = &x ;
pc = &y ; // Compilation Error
所以它看起来是一个有效的行为