C动态数组中的内存泄漏-丢失数据

C动态数组中的内存泄漏-丢失数据,c,arrays,dynamic,C,Arrays,Dynamic,我有一个函数1,每次分配一个具有特定字节数的数组 当我使用printf时,我可以看到我的数据加载到此数组中 function1 (other arguments, CvPoint2D32f* array1) 然后有一个function2,我在其中调用function1,并将array1数据分配给另一个变量(array2) 当我使用printf时,我可以看到我无法访问我的数据。该程序打印0.000 函数2由我的主程序调用,在主程序中,我将数据分配给第三个变量 我搜索,我搜索,但找不到什么是错误的

我有一个
函数1
,每次分配一个具有特定字节数的数组

当我使用
printf
时,我可以看到我的数据加载到此数组中

function1 (other arguments, CvPoint2D32f* array1)
然后有一个
function2
,我在其中调用
function1
,并将array1数据分配给另一个变量(array2)

当我使用
printf
时,我可以看到我无法访问我的数据。该程序打印0.000

函数2
由我的主程序调用,在主程序中,我将数据分配给第三个变量

我搜索,我搜索,但找不到什么是错误的

传递指针还不够吗

帮助,如果我不够具体,请询问我:

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;
}
编辑=======================================

我试着在这里张贴之前做,但这里有一个问题,我得到

在我加载数组1中关于CvPoint2D32f的非类类型的数据的那一行编译时出错

这就是我在这些行中得到错误的地方所做的:

array1[cnt].x = (tpt1.x + tpt2.x)/2; 
array1[cnt].y = (tpt1.y + tpt2.y)/2;
第二版=========================

两个答案都有帮助,而且都是正确的。谢谢大家!问题解决了。 我使用两个函数的双指针将数据从function1导出到function2,并从function2导出到主程序。我使用了一些临时变量,这很有帮助。这就不那么令人困惑了。

有两种情况:

  // 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);
      ...

我认为问题在于你可能需要场景2。在“function1()”中尝试“**指针指向指针”语法有两种情况:

  // 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);
      ...

我认为问题在于你可能需要场景2。在“function1()”中尝试“**指针指向指针”语法(尝试解释C指针传递语义,请稍听我的)

C只有pass-by值,这意味着您不能将参数更改为函数。因此:

function1(IplImage* grey, IplImage* image, CvPoint2D32f *array1){
    ....
    array1 = (CvPoint2D32f*)malloc(array_counter*sizeof(CvPoint2D32f))
    ....
}
r_counter = function1(image1, image2, array2);
function1
中对
array1
所做的更改在该函数外部不可见(
array1
是通过值传递的,而不是通过引用传递的)

要解决此问题,请向函数传递一个变量,该变量包含指向要通过引用传递的变量的指针:

function1(IplImage* grey, IplImage* image, CvPoint2D32f **array1){
    ....
    *array1 = (CvPoint2D32f*)malloc(array_counter*sizeof(CvPoint2D32f))
    ....
}
r_counter = function1(image1, image2, &array2);
i、 只需添加另一个间接层次。请参阅RFC 1925 truth 6a(始终可以添加另一级别的间接寻址)。

(尝试解释C指针传递语义,请稍听我的)

C只有pass-by值,这意味着您不能将参数更改为函数。因此:

function1(IplImage* grey, IplImage* image, CvPoint2D32f *array1){
    ....
    array1 = (CvPoint2D32f*)malloc(array_counter*sizeof(CvPoint2D32f))
    ....
}
r_counter = function1(image1, image2, array2);
function1
中对
array1
所做的更改在该函数外部不可见(
array1
是通过值传递的,而不是通过引用传递的)

要解决此问题,请向函数传递一个变量,该变量包含指向要通过引用传递的变量的指针:

function1(IplImage* grey, IplImage* image, CvPoint2D32f **array1){
    ....
    *array1 = (CvPoint2D32f*)malloc(array_counter*sizeof(CvPoint2D32f))
    ....
}
r_counter = function1(image1, image2, &array2);

i、 只需添加另一个间接层次。请参阅RFC 1925 truth 6a(始终可以添加另一个间接级别)。

如果在搜索中使用与问题中使用的关键字类似的关键字,则可能永远找不到答案。。。至少张贴一个代码或其他东西…对于未来的问题,请看一看,如果你在搜索中使用的关键字与你的问题中使用的关键字相似,那么你可能永远也找不到答案。。。至少张贴一个代码或什么的…对于未来的问题,请看一下好的,我会尽量让你知道。谢谢你们的回答,大家请原谅,如果问题没有被正确地提出好的,我会尽量让你们知道。谢谢你们的回答,大家请原谅,如果问题的格式不正确