两种情况:
// 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()”中尝试“**指向指针”语法
(试图解释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 按值传递,而不是通过引用传递)。
array1
function1
为了解决这个问题,请将函数传递给函数 包含一个指针 要通过引用传递的变量:
function1(IplImage* grey, IplImage* image, CvPoint2D32f **array1){ .... *array1 = (CvPoint2D32f*)malloc(array_counter*sizeof(CvPoint2D32f)) .... } r_counter = function1(image1, image2, &array2);
即只添加另一个间接级别。参见RFC 1925的真相6a( 始终可以添加另一级别的间接。 )。