Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/04/2014, 21:36
Avatar de Drewermerc
Drewermerc
 
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 10 meses
Puntos: 5
dudas de memoria dinamica

hola a todos.

bueno tengo unas dudas bueno pues yo no sabia que que realloc se podia usar solo y bueno queria saber si ese metodo es igual de efectivo que usar malloc y realloc juntos.

y tambien queria saber por que si guardo datos usando scanf al imprimir los valores me resultados erroneos asi.(aclaro esto es solo cuando se usa realloc solo.)

Código C:
Ver original
  1. Lista enlazada
  2.     Elemento 1 de la lista enlazada (0 para salir): 5
  3.     Elemento 2 de la lista enlazada (0 para salir): 5
  4.     Elemento 3 de la lista enlazada (0 para salir): 5
  5.     Elemento 4 de la lista enlazada (0 para salir): 5
  6.     Elemento 5 de la lista enlazada (0 para salir): 0
  7.     0 0 0 135153

veo que la malloria usa

Código C:
Ver original
  1. //aceder a los datos
  2.     *(lista+i-1) = 5;
  3. //guardar datos con scanf
  4.     &*(lista)

este tipo para acceder a datos de la memoria o guardar datos en ella yo por regular uso mas este metodo.

Código C:
Ver original
  1. lista[i+1];
  2.     &lista[i];

que funciona igual nose si algun metodo es es el correcto o los dos son corecto y es como cadaquien se acomode a programar.
tambien queria saber cual es la diferencia entre esto:

Código C:
Ver original
  1. //si en un programa pongo esto da error al llegar a los 6 registros
  2. realloc(lista,i+1*sizeof(int));
  3. //pero si lo pongo asi ya no tengo el error
  4. realloc(lista,(i+1)*sizeof(int));
  5.  
  6. //codigo completo
  7.  
  8.     #include <stdio.h>
  9.     #include <stdlib.h>
  10.      
  11.     main()
  12.     {
  13.     int *lista,i=0,r;
  14.     puts("Lista enlazada");
  15.      
  16.     lista=(int *) malloc(sizeof(int));
  17.      
  18.     printf("\nElemento %d de la lista enlazada y preciona 1 para agrgar otro elmento",i+1);
  19.     scanf("%d",&*(lista));
  20.             scanf("%d",&r);
  21.                 while(r==1)
  22.                 {
  23.                     i++;
  24.                     realloc(lista,i+1*sizeof(int));
  25.                     scanf("%d",&*(lista+i));
  26.                     puts("Desea agregar otro elemento");
  27.                     scanf("%d",&r);
  28.                    
  29.                 }
  30.        
  31.         for(int x=0;x<i+1;x++)
  32.         {
  33.         printf("%d ",lista[x]);
  34.        
  35.         }
  36.        
  37.         free(lista);
  38.     }
la verdad yo pense que la memoria dinamica no tenia mcuho uso pero ahora veo que te ayuda a manejar mucho mejor la memoria.
con lo que me surge otra duda si se puede trabar la memoria dinamica y manejar como matrizes, arrays unidimencionales etc. entonces cual seriamas conveniente usar memoria dinamica o las otras opciones o depende del programa que se desallorre.
bueno espero que me puedan ayudar.
saludos a todo.