Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/08/2016, 16:53
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Pregunta liberar memoria correctamente con free

¡Hola! >_<

Tengo una duda que me quita el sueño

Si uso esta forma de reserva de memoria:
Código C:
Ver original
  1. int linhas = 10;
  2.     int colunas = 10;
  3.     int **matrix = ( int** ) malloc ( sizeof (int) * linhas * colunas );

¿Seria correcto liberarlo de esta forma?:
Código C:
Ver original
  1. free ( matrix );

tengo entendido que malloc ( sizeof (int) * linhas * colunas ) reserva la memoria sin fragmentar. ¿O sea que reservando así, todas las casillas quedan adyacentes, cierto? Luego acontece el cast a 2d o algo así.
El caso es que usando malloc para reservar primero el vector de punteros, y luego un loop para reservar cada uno de los vectores que será apuntado por el vector de punteros reservado previamente, puede pasar que cada vector quede desperdigado donde le parezca a malloc. ¿No es eso? Para que hagan una idea de lo que digo si reservo así:
Código C:
Ver original
  1. int **m = (int**)malloc(sizeof(int)*10);
  2. for(int i = 0; i < 10; i++)
  3. m[i]=(int*)malloc(sizeof(int)*20);
¿En ese caso si que debo usar un loop para liberar correcto? ¿Pero en el caso de usar malloc como dije antes, se puede prescindir de usar el loop para ir liberando cada uno de los vetores apuntados por el vector de punteros y usar free como si de un array se tratara?. No estoy del todo seguro. ¿Alguien me lo confirma o me lo niega?

Esa es mi duda mayor vamos.

¡Gracias y buen finde!