Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Matrices dinámicas y Realloc en funciones

Estas en el tema de Matrices dinámicas y Realloc en funciones en el foro de C/C++ en Foros del Web. Hola, quisiera que alguien me ayude, ya que soy principiante y hace una semana que busco solución al siguiente problema. Defino una matriz dinámica de ...
  #1 (permalink)  
Antiguo 16/07/2012, 20:53
 
Fecha de Ingreso: mayo-2011
Mensajes: 6
Antigüedad: 13 años, 6 meses
Puntos: 0
Matrices dinámicas y Realloc en funciones

Hola, quisiera que alguien me ayude, ya que soy principiante y hace una semana que busco solución al siguiente problema.

Defino una matriz dinámica de float, la mando como parámetro en una función que le asigna memoria, carga datos y vuelve a resignar memoria con Realloc SOLO a una de sus FILAS, pero luego de esto imprime en pantalla cualquier cosa ¿Por que?

Si saco realloc y no agrego ningun dato extra funciona bien...

¿Como debería ser el código corregido?
Gracias

Código C++:
Ver original
  1. #include <fstream>          // Librería de entrada y salida de archivos
  2. #include <iostream>         // Libreria para flujo de entrada y salida de datos en pantalla
  3. #include <cstdlib>          // Utilizado para la función "Malloc"
  4. #include <string.h>         // Para "strcat" de la función "Open_STL_File"
  5.  
  6.  
  7. using namespace std;
  8.  
  9. float **FUNCION(float PARAMETRO1);
  10.  
  11. int main()
  12. {
  13.     float **PUNTERO_DE_FUNCION;                 // defino puntero bidimensional
  14.  
  15.  
  16.     PUNTERO_DE_FUNCION = FUNCION(1000);
  17.  
  18.     cout << PUNTERO_DE_FUNCION[0][0] << endl;
  19.     cout << PUNTERO_DE_FUNCION[0][1] << endl;
  20.     cout << PUNTERO_DE_FUNCION[0][2] << endl;
  21.  
  22.     cout << endl;
  23.     cout << PUNTERO_DE_FUNCION[1][0] << endl;
  24.     cout << PUNTERO_DE_FUNCION[1][1] << endl;
  25.     cout << PUNTERO_DE_FUNCION[1][2] << endl;
  26.  
  27.     cout << endl;
  28.     cout << PUNTERO_DE_FUNCION[1][3] << endl;
  29.     cout << PUNTERO_DE_FUNCION[1][4] << endl;
  30.     cout << PUNTERO_DE_FUNCION[1][5] << endl;
  31.  
  32.     return(0);
  33. }
  34.  
  35. float **FUNCION(float PARAMETRO1)
  36. {
  37.     float **PUNTERO_INTERNO = NULL;
  38.     int dimension = 2;
  39.  
  40.  
  41.     // Asigno memoria a la matriz de punteros
  42.  
  43.     if((PUNTERO_INTERNO = (float **) malloc( dimension * sizeof(float *))) == NULL)
  44.     {
  45.         printf("\nMemory insufficient for the STL file.");
  46.         exit(3);
  47.     }
  48.  
  49.  
  50.     // Asigno memoria a cada una de las filas
  51.  
  52.     for(int i = 0 ; i < dimension ; i++)
  53.     {
  54.         if((PUNTERO_INTERNO[i] = (float *) malloc( 3 * sizeof(float *))) == NULL)
  55.         {
  56.             printf("\nMemory insufficient for the STL file.");
  57.             exit(3);
  58.         }
  59.     }
  60.  
  61.     // Cargo cada una de las filas
  62.  
  63.     PUNTERO_INTERNO[0][0] = PARAMETRO1 /100;
  64.     PUNTERO_INTERNO[0][1] = PARAMETRO1 /150;
  65.     PUNTERO_INTERNO[0][2] = PARAMETRO1 /180;
  66.  
  67.     PUNTERO_INTERNO[1][0] = PARAMETRO1 /100;
  68.     PUNTERO_INTERNO[1][1] = PARAMETRO1 /150;
  69.     PUNTERO_INTERNO[1][2] = PARAMETRO1 /180;
  70.  
  71.  
  72.      //Reasigno memoria a la fila de abajo
  73.  
  74.     if(    (PUNTERO_INTERNO[1] = (float *) realloc ( PUNTERO_INTERNO , 6 * sizeof(float *) ) ) == NULL)
  75.     {
  76.         printf("\nMemory insufficient2.");
  77.         exit(3);
  78.     }
  79.  
  80.  
  81.     // reacargo informacion a la fila de abajo
  82.  
  83.     PUNTERO_INTERNO[1][3] = PARAMETRO1 /10;
  84.     PUNTERO_INTERNO[1][4] = PARAMETRO1 /15;
  85.     PUNTERO_INTERNO[1][5] = PARAMETRO1 /18;
  86.  
  87.     return (PUNTERO_INTERNO);
  88. }
  #2 (permalink)  
Antiguo 17/07/2012, 01:29
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 10 meses
Puntos: 94
Respuesta: Matrices dinámicas y Realloc en funciones

Hola! cuando asignas memoria para cada fila en el sizeof debes usar float, osea sizeof(float) y no sizeof(float *). Igual este no creo q sea el problema

El problema es que en el primer argumento de realloc le pasas PUNTERO_INTERNO, pero debes pasar PUNTERO_INTERNO[1] ya que ese puntero estas modificando. De la forma q lo haces vos estas modificando el puntero a puntero


Saludos
  #3 (permalink)  
Antiguo 17/07/2012, 22:07
 
Fecha de Ingreso: mayo-2011
Mensajes: 6
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Matrices dinámicas y Realloc en funciones

Muchas gracias!!! Solucionado!!!!

Etiquetas: funcion, funciones, int, matrices, realloc, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:20.