我有一个计算和“创建”矩阵的函数。我的函数在内联时运行良好,但是当我尝试将代码放入函数时,我无法返回结果矩阵。
我希望我的函数调用如下:
CvMat projectionResult;
project_on_subspace(&projectionResult);
cvShowImage("test", &projectionResult );
(最终使用*CvMat
代替`CvMat)
我做的是以下内容:
void project_on_subspace(CvMat * source)
{
source = cvCreateMat( feature_positions[feature_number].height, feature_positions[feature_number].width, CV_32FC1 );
//some more code
}
但是cvCreateMa
t函数会改变源指针的值,所以当我从函数返回时,projectionResult
矩阵没有被初始化。
我知道这是一个非常简单的问题,但我真的不明白如何使这项工作?
是否可以在不更改函数原型的情况下执行此操作,还是需要将其更改为**CvMat
而不是*CvMat
?
编辑:我更喜欢在参数指针中返回我的结果,而不是使用“return”语句,但两者都没问题。
答案 0 :(得分:0)
CvMat * source
表示您无法更改source
指向的地址,但可以更改source
的内容。 (请注意,您可以更改它,它不会为调用者更改)。如果您需要能够更改source
指向的位置,则需要添加另一个间接级别CvMat ** source
,这样您就可以更改*source
并使其影响调用方法。
答案 1 :(得分:0)
改为执行此操作(假设cvCreateMat未返回指向cvCreateMat的指针):
void project_on_subspace(cvMat **source)
{
*source = cvCreateMat(etc...);
// etc...
并称之为:
CvMat *projectionResult;
project_on_surface(&projectionResult);
不要忘记在适当的时候释放projectionResult。