elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  malloc dentro de una funcion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: malloc dentro de una funcion  (Leído 2,344 veces)
erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
malloc dentro de una funcion
« 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


En línea

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: malloc dentro de una funcion
« Respuesta #1 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


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: malloc dentro de una funcion
« Respuesta #2 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
En línea

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines