Ver Mensaje Individual
  #6 (permalink)  
Antiguo 13/06/2010, 15:18
AlanChavez
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 13 años, 11 meses
Puntos: 95
Respuesta: Definir tamaño de una matriz

Para definir arrays de dos dimensiones, es en realidad un array de UNA dimension de punteros.

Digamos que tienes array dinamico de 6 posiciones
array_dinamico1:
|__|__|__|__|__|__|__|
0 1 2 3 4 5 6

Si queremos hacer una matriz dinámica, entonces cada elemento del array dinamico es a su vez otro array dinamico.
matriz_dinamica1:
|_0_|_0_|_0_|_0_|_0_|_0_|_0_| ...... |_i__|
|_1_|_1_|_1_|_1_|_1_|_1_|_1_| ...... |_i+1|
|_._|_._|_._|_._|_._|_._|_._|_._| ...... |_...._|
|_._|_._|_._|_._|_._|_._|_._|_._| ...... |_...._|
|_._|_._|_._|_._|_._|_._|_._|_._| ...... |_...._|
|_j_|_j_|_j_|_j_|_j_|_j_|_j_|_j_| ...... |_i+j_|


Espero que mi dibujo sea claro, porque me tarde haciendolo :P

Entonces para una matriz de i-filas y j-columnas, tenemos
Código C:
Ver original
  1. int **matriz;
  2.  
  3. int filas_dinamicas;
  4. int columnas_dinamicas;
  5.  
  6. matriz = (int**) malloc(filas_dinamicas*sizeof(int));
  7. int i =0;
  8. for(i=0;i<filas_dinamicas;i++)
  9. {
  10. matriz[i] = (int**)malloc(columnas_dinamicas*sizeof(int));
  11. }
para liberarlo es:
Código C:
Ver original
  1. for(i=0;i<filas_dinamicas;i++)
  2. {
  3. free (matriz[i]);
  4. }
  5. free(matriz);
Osea que primero liberamos las columnas ( o los vectores dinamicos que creamos despues) y despues liberamos al primer vector dinamico que creamos....


De verdad te recomiendo primero que te eches una leída al tema de puntero, es muchisimo mas claro ya cuando entiendes exactamente como se manejan los punteros

Y ahora solo a manera de nota, eso es código para C, cuando estas trabajando con C++ es muchisimo mas rápido y eficiente utilizar new y delete