Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: erest0r en 18 Diciembre 2013, 18:19 pm



Título: malloc dentro de una funcion
Publicado por: erest0r en 18 Diciembre 2013, 18:19 pm
Voy directo al codigo:

Código
  1. void generar( int **arreglo, int fil, int col )
  2. {
  3.    int i;
  4.  
  5.    arreglo = (int **)malloc(fil*sizeof(int *));
  6.  
  7.    for( i = 0; i < fil; i++ )
  8.        arreglo[i] = (int *)malloc(col * sizeof(int));
  9.  
  10. }
  11.  

Ok, luego de haber generado mi arreglo multidimensional y lo quiero mostrar con un ciclo dentro del main, los valores no se muestran sino que sale un error de windows, en cambio si muestro los valores dentro de la misma funcion, si lo hace. Imagino que se deben crear variables temporales solamente dentro de la funcion y por eso no se muestran en el main, y quisiera saber si existe una manera de poder reservar esa memoria y mostrarla en main.

Gracias


Título: Re: malloc dentro de una funcion
Publicado por: rir3760 en 18 Diciembre 2013, 18:44 pm
Cuando tengas una duda o problema con alguno de tus programas por favor indica el lenguaje de programación.

En cuanto a la causa del error es la que comentas:
Imagino que se deben crear variables temporales solamente dentro de la funcion y por eso no se muestran en el main

Como resolverlo depende del lenguaje, en el caso de C++ lo mas fácil es utilizando una referencia, un ejemplo de ello:
Código
  1. void generar(int**& arreglo, int fil, int col )
  2. {
  3.   arreglo = (int**) malloc(fil * sizeof(int *));
  4.   for (int i = 0; i != fil; ++i)
  5.      arreglo[i] = (int*) malloc(col * sizeof(int));
  6. }
También se debe remplazar el uso de malloc por el operador new (y free por delete).

----

En el caso de C bien pasas un puntero a la variable (tipo "int ***") o, la mas sencilla, modificas la función para que retorne la dirección del bloque principal:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int **generar(int fil, int col);
  5.  
  6. int main(void)
  7. {
  8.   int **mat;
  9.  
  10.   /* ... */
  11.  
  12.   mat = generar(10, 20);
  13.  
  14.   /* ... */
  15.  
  16.   return EXIT_SUCCESS;
  17. }
  18.  
  19. int **generar(int fil, int col)
  20. {
  21.   int **mat;
  22.   int i;
  23.  
  24.   mat = malloc(fil * sizeof *mat);
  25.   for (i = 0; i < fil; i++)
  26.      mat[i] = malloc(col * sizeof *mat[i]);
  27.  
  28.   return mat;
  29. }

Un saludo


Título: Re: malloc dentro de una funcion
Publicado por: erest0r en 18 Diciembre 2013, 19:05 pm
Gracias amigo, es en C el problema, no incluí el tipo de lenguaje, por como la sección del foro es C/C++ pense que se sobrentendia