我对 OpenCV 的一个函数有一个非常奇怪(相当不可能)的问题 - 传递给cvGetSize
的指针,cvGetSize
内的指针变为NULL
。我在CvGetSize
内检查了它们,它真的变成了NULL
。没有解构,只是演员。
这怎么可能? (lang:C,编译器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 = %p\n", (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文件,一切正常。
答案 0 :(得分:-1)
实际上传递的指针不被视为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
所以它看起来像一个有效的行为