How to deallocate 3D arrays (array of pointers to arrays)



  • I allocated memory within an DLL using malloc:

    I = (float **)malloc(zmax * sizeof(float *)); 
    
    	for( i = 0; i <= zmax; ++i) 
    	{
         	I[i] = (float *)malloc(xmax*ymax * sizeof(float));
    	}
    

    I deallocated using free:

    for( i = 1; i <= zmax; ++i) 
    	{
         	free(I[i]);
    	}
    	free(I);
    	free(*I);
    

    When I call this DLL from Labview multiple times the program is running out of memory. I want to make sure that this behavior is not due to wrong deallocation inside the DLL.
    Can anyone help me?
    Thanks in advance.



  • You allocate using this loop with i set to 0:

    for( i = 0; i <= zmax; ++i) 
    {
    	I[i] = (float *)malloc(xmax*ymax * sizeof(float));
    }
    

    But you deallocate with i set to 1:

    for( i = 1; i <= zmax; ++i) 
    {
    	free(I[i]);
    }
    

    This looks wrong to me. I guess this is the fault. Just set i to 0 and check the result.

    Besides, why do you note an additional free?

    free(*I);
    

    I think this is not necessary.



  • I = (float **)malloc(zmax * sizeof(float *));

    this is not three d


Log in to reply