Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/11/2013, 07:13
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: Como iniciar una Matriz Dinamica en una Funcion???

"...Algun experto en el tema que pueda ayudarme?..."

Bueno no soy un experto pero te puedo echar un cable :))

Tienes que trabajar con la referencia tanto en la llamada como en las asignaciones de la funcion:

Código C:
Ver original
  1. void nueva(int **mat) {
  2.     int i;
  3.  
  4.     *mat = malloc(2 * sizeof(int *));
  5.     for(i=0;i<2;i++){
  6.         (*mat)[i] = malloc(2 * sizeof(int *));
  7.     }
  8. }

Y para la llamada envias la referencia:

Código C:
Ver original
  1. int **matriz = 0;
  2. nueva(&matriz);

Alternativamente puedes crear una funcion que retorne el nuevo bloque de memoria:

Código C:
Ver original
  1. int **nueva() {
  2.     int **mat, i;
  3.  
  4.     if(!(mat = malloc(2 * sizeof(int *)))) {
  5.         return 0;
  6.     }
  7.     for(i=0;i<2;i++){
  8.         if(!(mat[i] = malloc(2 * sizeof(int *)))) {
  9.             return 0;
  10.         }
  11.     }
  12.  
  13.     return mat;
  14. }

En este segundo metodo la llamada retorna el nuevo bloque:

Código C:
Ver original
  1. int **matriz = 0;
  2. matriz = nueva();

Lo del los valores de retorno es una buena practica; normalmente se usa el 0 como finalizado sin error, y >0 como indice de error.

En cualquier caso recuerda que para cada malloc necesitas un free.

Saludos
vosk