在Learning OpenCV
书中:
.
.
CvCapture *capture = cvCreateFileCapture(argv[1]);
IplImage* frame;
while(1)
{
frame = cvQueryFrame(capture);
.
.
}
在这里,我们可以看到*frame
是一个指针。但是,当我们编写下面的frame = cvQueryFrame(capture);
时,我们并没有为指针分配地址。在这种情况下,frame
将保持的值究竟是多少?
谢谢。
frame
是指向IplImage
类型对象的指针。假定cvQueryFrame()
函数分配一个IplImage
对象并返回该对象的地址。声明
frame = cvQueryFrame(capture);
将该返回指针的值分配给CCD_ 9。如果函数确实在分配一个新对象,您可能需要稍后通过调用operator delete
或之类的函数来释放内存
void cvDestroyFrame( IplImage * );
此外,你在问题末尾的陈述("*frame
是指针"(也不准确——frame
是指针;*frame
表示您正在取消引用使其类型为IplImage
的指针。
但是,当我们编写下面的frame=cvQueryFrame(capture(;时;,我们没有为指针分配地址。
实际上,我们正在为指针分配地址。cvQueryFrame
返回指针值(地址(。
实际上,*frame
是一个取消引用的指针,它将给出指针frame
所指向的对象。在这种情况下,函数cvQueryFrame()
返回被分配给frame
的指针。
由于您没有提供cvQueryFrame的原型(我不熟悉这个库(,我假设它的返回类型是IplImage*。这个方法可能在自己内部分配一些内存,然后从分配中返回地址。所以你在现实中,正在设置一个地址。
cvQueryFrame
返回一个指向IplImage
的指针,这意味着您的代码确实为指针分配了一个地址。这是函数的签名:
IplImage* cvQueryFrame( CvCapture* capture );
阅读手册:
- HighGUI参考手册