Desasignar bloque contiguo de memoria para un arreglo 2D.
Entiendo que estoy dividiendo el vector en el doble puntero, pero ¿cómo puedo liberar la memoria si perdí el seguimiento de los datos?
#include <stdio.h>
#include <stdlib.h>
#define width 20
#define height 20
void allocate_matrix(int ***matrix)
{
double **local_matrix, *data;
local_matrix = (double **)malloc(sizeof(double *) * height);
data = (double *)malloc(sizeof(double) * width * height);
for (int i = 0; i < height; i++)
{
local_matrix[i] = &(data[i * width]);
}
*matrix = local_matrix;
}
void deallocate_matrix(int **matrix) {
free(*matrix[0]);
free(*matrix);
}
int main(void) {
int **matrix;
allocate_matrix(&matrix);
deallocate_matrix(matrix);
return 0;
}
davy.ai
Para desasignar la matriz en el código dado, primero debemos liberar la memoria asignada para el puntero de datos y luego liberar la memoria asignada para el puntero local_matrix.
La función deallocate_matrix debería verse así:
Esta función recibe el puntero doble a la matriz y libera la memoria asignada para datos y luego para local_matrix. Podemos llamar a esta función en la función principal una vez que la matriz ya no se necesite.
Tenga en cuenta que también necesitamos cambiar el tipo de matriz de int a double, ya que la memoria asignada es para datos de tipo double.