Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/11/2012, 07:12
Avatar de rodrigoemece
rodrigoemece
 
Fecha de Ingreso: septiembre-2011
Mensajes: 68
Antigüedad: 13 años, 2 meses
Puntos: 1
Busqueda Duda malloc, reserva dinámica de memoria

Acabo de empezar con la reserva dinámica de memoria y no logro entenderlo del todo, ¿podríais echarme una mano?

El programa debe duplicar las letras de una palabra introducida y devolver el número de letras de la original. Todo ello desde una función (Duplicar()). La función también debe reservar memoria dinámica para la nueva palabra.

¿Debo reservar memoria para la primera palabra también? ¿La reserva de memoria la debo de hacer en la función o en el main? Tal como tengo el programa ahora no devuelve la palabra duplicada a no ser que lo ponga así:
(Quitando free(palabra2) y escribiendo *palabra2=(char *)malloc(*nl*sizeof(char)+1); en vez de palabra2=(char *)malloc(*nl*sizeof(char)+1);)
Código C:
Ver original
  1. void Duplicar(char *palabra, char *palabra2, int *nl)
  2. {
  3.     int i=0;
  4.     int j=0;
  5.    
  6.     while(palabra[i]!='\0') i++;        
  7.     *nl=i;
  8.     i=0;
  9.     *palabra2=(char *)malloc(*nl*sizeof(char)+1);  
  10.     while(palabra[i]!='\0')
  11.     {
  12.         palabra2[j]=palabra[i];
  13.         j++;
  14.         palabra2[j]=palabra[i];
  15.         i++;
  16.         j++;
  17.     }  
  18.     palabra2[j]='\0';    
  19. }

Así que intuyo que el problema está en malloc y como lo utilizo, muchas gracias por vuestra ayuda.

Código C:
Ver original
  1. #include <stdio.h>
  2. #define LNX 9999
  3. void Duplicar(char *, char *, int *);
  4.  
  5. main()
  6. {
  7.     char word[LNX],word2[LNX];
  8.     int letras=0;
  9.     printf("Introduza a palabra a duplicar: ");
  10.     gets(word);
  11.     Duplicar(word,word2,&letras);
  12.     printf("\nA palabra duplicada e: %s",word2);
  13.     printf("\nO numero de letras da palabra orixinal e: %d",letras);
  14.    return 0;
  15.    
  16. }
  17.  
  18. void Duplicar(char *palabra, char *palabra2, int *nl)
  19. {
  20.     int i=0;
  21.     int j=0;
  22.    
  23.     while(palabra[i]!='\0') i++;        
  24.     *nl=i;
  25.     i=0;
  26.     palabra2=(char *)malloc(*nl*sizeof(char)+1);  
  27.     while(palabra[i]!='\0')
  28.     {
  29.         palabra2[j]=palabra[i];
  30.         j++;
  31.         palabra2[j]=palabra[i];
  32.         i++;
  33.         j++;
  34.     }  
  35.     palabra2[j]='\0';
  36.    
  37.     free(palabra2);
  38.  
  39. }

Última edición por rodrigoemece; 25/11/2012 a las 07:20