堆栈传递时,指针变为null

时间:2014-05-14 12:54:17

标签: c opencv c-api

我对 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文件,一切正常。

1 个答案:

答案 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

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