指针被栈传递时变为空

  • 本文关键字:指针 opencv c-api
  • 更新时间 :
  • 英文 :


我有一个非常奇怪(相当不可能)的问题与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

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

相关内容

  • 没有找到相关文章

最新更新