我有一个function1
,我每次都会分配一个特定字节数的数组。
当我使用printf
时,我可以看到我的数据已加载到此阵列上。
function1 (other arguments, CvPoint2D32f* array1)
然后有一个function2
,我在其中调用function1
并将array1数据分配给另一个变量(array2)。
function2(other stuff, CvPoint2D32f* array2)
当我使用printf
时,我发现无法访问我的数据。该程序打印0.000 ..
function2
由我的主程序调用,我将数据分配给第三个变量......
我搜索并搜索但找不到有什么问题。
传递指针还不够吗?
帮助,如果我不够具体,请问我:
function1(IplImage* grey, IplImage* image, CvPoint2D32f *array1){
int array_counter = cvFindContours(grey, storage_color, &colorcontoursizeof(CvContour),
CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
array1 = (CvPoint2D32f*)malloc(array_counter*sizeof(CvPoint2D32f))
if (array_counter == 0){
printf("Error allocating memory or Just a colour missing!!!\n\n\n");
free(Man);
}
cvReleaseMemStorage(&storage_color); // Releasing memory.
free(Man);
return array_counter;
}
int function2(IplImage* image, CvPoint2D32f *array2, other stuff){
...other stuff...
// Find the contours for the different colors.
r_counter = function1(image1, image2, array2);
return 0;
}
编辑=======================================
我在发布之前尝试过这样做,但这是我遇到的问题。
在我在array1中加载关于非类型CvPoint2D32f的数据的行编译时出错。
这就是我在这些行中所做的错误:
array1[cnt].x = (tpt1.x + tpt2.x)/2;
array1[cnt].y = (tpt1.y + tpt2.y)/2;
第二次编辑=========================
这两个答案都有帮助并且是正确的。谢谢大家!问题已经解决了。 我使用双指针将函数从function1导出到function2,从function2导出到主程序。我使用了一些有用的临时变量。这不那么令人困惑。
答案 0 :(得分:2)
两种情况:
// SCENARIO 1: Array allocated outside a function and passed into it
myfunc (char * buff)
{
buff[0] = 'A';
...
main ()
...
char *mybuffer = NULL;
if ((mybuffer = malloc (100))
myfunc (mybuffer);
...
// SCENARIO 2: Array allocated inside of a function and passed out from it
myfunc (char **buff)
{
*buff = malloc (100);
...
main ()
char *mybuffer = NULL;
myfunc (&mybuffer);
...
我认为问题是您可能需要方案2.在“function1()”中尝试“**指向指针”语法
答案 1 :(得分:2)
(试图解释C指针传递语义,请稍等一下)。
C只有pass-by-value,这意味着你不能改变函数的参数。所以在:
function1(IplImage* grey, IplImage* image, CvPoint2D32f *array1){
....
array1 = (CvPoint2D32f*)malloc(array_counter*sizeof(CvPoint2D32f))
....
}
r_counter = function1(image1, image2, array2);
您在array1
中对function1
所做的更改在该函数之外是不可见的(array1
是按值传递的,而不是通过引用传递的。)
要解决此问题,请将包含指针的变量传递给函数,以便通过引用传递给它的变量:
function1(IplImage* grey, IplImage* image, CvPoint2D32f **array1){
....
*array1 = (CvPoint2D32f*)malloc(array_counter*sizeof(CvPoint2D32f))
....
}
r_counter = function1(image1, image2, &array2);
即。只需添加另一个间接级别。请参阅RFC 1925事实6a(始终可以添加另一级别的间接。)。