-3

我对OpenCV的一个函数有一个非常奇怪(相当不可能)的问题 - 传递给cvGetSize, 内部的指针cvGetSize变成NULL. 我在里面检查了它们CvGetSize,它真的变成了NULL。没有取消引用,只是强制转换。

这怎么可能?(语言: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 文件,则一切正常。

4

1 回答 1

-1

实际上传递的指针不被视为常量,比较:

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

所以它看起来像一个有效的行为

于 2014-05-14T13:03:29.827 回答