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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  dudas sobre memoria dinamica.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: dudas sobre memoria dinamica.  (Leído 1,859 veces)
Drewermerc

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
dudas sobre memoria dinamica.
« en: 1 Mayo 2014, 03:42 am »


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.

Código
  1.    #include <stdio.h>
  2.    #include <stdlib.h>
  3.  
  4.    int main(){
  5.    int *lista= NULL, num, i;
  6.  
  7.    do
  8.    {
  9.        i++;
  10.        lista =realloc(lista,(i)*sizeof(int));
  11.        printf("\nElemento ");
  12.        scanf ("%d", &*(lista+i));
  13.        printf("%d\n", lista);
  14.        puts("presiona uno para continuar 0 para salir");
  15.        scanf("%d", &num);
  16.     } while (num == 1);
  17.  
  18.        free(lista);
  19.        return 0;
  20.    }
  21.  
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
  1. Elemento 5
  2. 154512
  3. presiona uno para continuar 0 para salir
  4.  


veo que la mayoria usa

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


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

Código
  1.    lista[i+1];
  2.    &lista[i];
  3.  

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


Código
  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.        }
  39.  
  40.  


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.


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: dudas sobre memoria dinamica.
« Respuesta #1 en: 1 Mayo 2014, 04:24 am »

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.
Una llamada a realloc con su primer argumento igual a NULL tiene el mismo efecto que llamar a malloc:
Código
  1. char *p;
  2.  
  3. p = realloc(NULL, 100); /* Equivalente a "p = malloc(100);" */

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
  1. Elemento 5
  2. 154512
  3. presiona uno para continuar 0 para salir
Porque estas imprimiendo la dirección del bloque, si se trata de eso debes utilizar el especificador "%p" y convertir explícitamente la dirección al tipo "void *":
Código
  1. printf("%p\n", (void *) lista);

O si se trata de imprimir los valores almacenados en el bloque debes utilizar un bucle, por ejemplo:
Código
  1. {
  2.   int j;
  3.  
  4.   for (j = 0; j < i; j++)
  5.      printf("%d\n", lista[j]);
  6. }

veo que la mayoria usa
Código
  1. //aceder a los datos
  2. *(lista+i-1) = 5;
  3. //guardar datos con scanf
  4. &*(lista)
No tiene caso utilizar "&*(lista)" ya que el efecto de los operadores se cancela, en otras palabras en lugar de "&*(lista)" basta con utilizar "lista".

Código
  1. //si en un programa pongo esto da error al llegar a los 6 registros
  2. realloc(lista,i+1*sizeof(int));
No funciona porque el operador "*" tiene mayor prioridad que "+" y por ello la expresión se evalúa asi:
Código:
i + (1 * sizeof(int))

cual seriamas conveniente usar memoria dinamica o las otras opciones o depende del programa que se desallorre.
Depende del programa.

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
Drewermerc

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: dudas sobre memoria dinamica.
« Respuesta #2 en: 1 Mayo 2014, 16:18 pm »

hola rir3760.
bueno muchas gracias por contestar, ahora si ya me quedo mas claro todo.  :D
« Última modificación: 1 Mayo 2014, 16:21 pm por Drewermerc » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda sobre memoria dinamica C++
Programación C/C++
erest0r 6 3,897 Último mensaje 11 Septiembre 2013, 09:34 am
por erest0r
Consutla sobre un problema con punteros y memoria dinamica.
Programación C/C++
Arturo400 1 1,726 Último mensaje 22 Septiembre 2016, 22:15 pm
por AlbertoBSD
Consulta sobre punteros y memoria dinámica
Programación C/C++
ing_maipu 5 4,012 Último mensaje 18 Octubre 2017, 19:21 pm
por ing_maipu
dudas memoria ram
Dispositivos Móviles (PDA's, Smartphones, Tablets)
inma55 1 2,064 Último mensaje 1 Mayo 2022, 17:14 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines