• Viernes 8 de Noviembre de 2024, 17:07

Autor Tema:  Problema redimensionando array de strings  (Leído 1401 veces)

krnl64

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Problema redimensionando array de strings
« en: Lunes 1 de Junio de 2009, 19:06 »
0
Hola a todos.
Estoy intentando hacer una función que recibe un array de strings y dentro copia ese array a uno temporal y lo redimensiono a n-1 para luego seguir
trabajando con él.
Pero no me lo hace bien. Les pongo el code y les comento:
Código: C
  1.  
  2. void redimlista(char **lista_palabras,const int longitud_lista)
  3. {
  4. char **lista_temporal;
  5. int i;
  6. int num;
  7. int longitud_lista_temporal;
  8. char palabra[8];
  9.  
  10. /* Pido memoria para almacenar los punteros a cadena */
  11.     lista_temporal=(char**)calloc(longitud_lista,sizeof(char*));
  12.  
  13.     /* Voy a copiar toda la lista de palabras al array temporal */
  14.     for(i=0;i<longitud_lista;i++)
  15.     {
  16.         /* Reservo memoria para almacenar la cadena 8 porque 8 es la longitud máxima de las palabras */
  17.         *(lista_temporal+i)=(char*)calloc(8,sizeof(char));             
  18.        
  19.         /*Copio la cadena */
  20.         strcpy(*(lista_temporal+i),*(lista_palabras+i));
  21.     }   
  22.  
  23.         /* Guardo la longitud del array de palabras */
  24.         longitud_lista_temporal=longitud_lista;
  25.  
  26.        /* Elijo una palabra aleatoriamente de la lista de palabras */
  27.         num=rand()%longitud_lista_temporal;
  28.        
  29.         /* Copio la palabra elegida */
  30.         strcpy(palabra,*(lista_temporal+num));
  31.  
  32.                 /* Adelanto todos los elementos un lugar */
  33.                 for(i=num;i<longitud_lista_temporal-1;i++)
  34.             *(lista_temporal+i)=*(lista_temporal+i+1);
  35.  
  36.               /* Linea problematica */
  37.               free(*(lista_temporal+i));
  38.  
  39.              longitud_lista_temporal--;
  40.        
  41.          lista_temporal=(char**)realloc(lista_temporal,longitud_lista_temporal*sizeof(char*));
  42.  
  43.           /* ....  mas codigo... */
  44.            
  45. }
  46.  
  47.  

El código de la línea 37 es el que me da problemas.
Por ejemplo,si a la función le paso un array de 5 palabras al hacer el free, me libera la memoria de los elementos 4 y 5 en vez de solo el 5º.
Es decir:

Antes del free
Código: C
  1.  
  2. *(lista_temporal+3)="pepe"
  3. *(lista_temporal+4)="paco"
  4.  
  5.  

Después del free
Código: C
  1.  
  2. *(lista_temporal+3)= liberado
  3. *(lista_temporal+4)= liberado
  4.  
  5.  

Y lo que quiero conseguir es:
Código: C
  1.  
  2. *(lista_temporal+3)= "pepe"
  3. *(lista_temporal+4)= liberado
  4.  
  5.  
para poder redimensionar después con realloc.
Cómo puedo arreglar esto ?
Gracias

krnl64

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Re: Problema redimensionando array de strings
« Respuesta #1 en: Lunes 1 de Junio de 2009, 20:00 »
0
No se si estoy en lo cierto, pero creo que la linea 37 me sobra porque realloc ya libera esa memoria.
Pueden confirmarme si estoy en lo cierto ?
Gracias

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problema redimensionando array de strings
« Respuesta #2 en: Lunes 1 de Junio de 2009, 20:36 »
0
Cita de: "krnl64"
No se si estoy en lo cierto, pero creo que la linea 37 me sobra porque realloc ya libera esa memoria.
Estás en lo cierto a medias :D Sólo debes liberar el último puntero devuelto por realloc().

http://www.manpagez.com/man/3/realloc/

Aunque yo no veo que uses realloc()  :lol: ...

Saludos

krnl64

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Re: Problema redimensionando array de strings
« Respuesta #3 en: Lunes 1 de Junio de 2009, 21:31 »
0
Elimino la linea 37 y entonces se ejecuta
Código: C
  1.  
  2. lista_temporal=(char**)realloc(lista_temporal,longitud_lista_temporal*sizeof(char*));
  3.  
  4.  
Basta con eso ?

Gracias

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problema redimensionando array de strings
« Respuesta #4 en: Martes 2 de Junio de 2009, 10:02 »
0
Cita de: "krnl64"
Basta con eso ?
Bueno, el free() lo haces a lista_temporal+i y el realloc() asigna a lista_temporal...

Cita de: "m0skit0"
Aunque yo no veo que uses realloc() :lol: ...
Vale, soy gilipollas...  &lt;_&lt;