I’m writing code which has a lot of 1 & 2 dimensional arrays. I got "error: can’t allocate region" and I think its because too much memory is allocated. I use "malloc" and "free" functions, but I’m not sure I’m using them correctly. Maybe you know where I could see good examples on memory management in C?
so.. I just trying to get one algorithm work and for now this code is just function after function..
//memory allocation for 1D arrays
buffer = malloc(num_items*sizeof(double));
//memory allocation for 2D arrays
double **cross_norm=(double**)malloc(150 * sizeof(double *));
for(i=0; i<150;i++)
{
cross_norm[i]=(double*)malloc(num_items*sizeof(double));
}
//code
Window(N, window_buffer);
STFTforBMP(buffer,N,f, window_buffer);
getMagnitude(buffer,f, N, magnitude);
calculateEnergy(flux,magnitude, f);
calculateExpectedEnergy(expected_flux, candidate_beat_period, downbeat_location, f);
calculateCrossCorrelation(cross, flux, expected_values, f);
findLargestCrossCorrelation(&cross_max, cross, f);
normalizeCrossCorrelation(cross_norm, &cross_max, cross, f);
...............
How should I use the free function?
You have to
free()the allocated memory in exact reverse order of how it was allocated usingmalloc().Note that You should free the memory only after you are done with your usage of the allocated pointers.
memory allocation for 1D arrays:
memory deallocation for 1D arrays:
memory allocation for 2D arrays:
memory deallocation for 2D arrays: