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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con realloc - c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con realloc - c  (Leído 2,360 veces)
HRSLASH

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Problema con realloc - c
« en: 5 Noviembre 2012, 01:51 am »

Hola foreros! asi como dice el titulo, estoy teniendo problemas al usar esta funcion, cada vez que ejecuto el programa el sistema lo aborta ya que alega que le estoy pasando un puntero invalido a realloc, he intentado varias cosas pero no hay caso, el error persiste.. Aca el codigo:

Código
  1. char *borrar_espacios(const char *s)
  2. {
  3. char *temp = NULL;
  4. int i;
  5.  
  6. temp = (char *) malloc(sizeof(char));
  7. for (i = 0; *s != '\0'; ++s)
  8. if (!isspace(*s)){
  9. temp = (char *) realloc(temp, sizeof(char));
  10. *temp = *s, ++temp, ++i;
  11. }
  12. *temp = '\n';
  13. return temp - i;
  14. }
  15.  

Gracias de antemano!  :D


« Última modificación: 5 Noviembre 2012, 02:38 am por HRSLASH » En línea

La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer
naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Problema con realloc - c
« Respuesta #1 en: 5 Noviembre 2012, 02:03 am »

Citar
ptr
Pointer to a memory block previously allocated with malloc, calloc or realloc, or a null pointer (to allocate a new block).
http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/

El problema es que cuando haces ++temp, temp deja de ser un puntero a un bloque reservado con malloc o calloc.

EDIT: No entiendo el uso que le quieres dar a realloc.


« Última modificación: 5 Noviembre 2012, 02:06 am por naderST » En línea

HRSLASH

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: Problema con realloc - c
« Respuesta #2 en: 5 Noviembre 2012, 02:18 am »

La idea era ir copiando caracter por caracter a un nuevo string sin los espacios en blanco e ir reservando memoria a medida que la fuera necesitando pq no se el tamaño del string que toma la funcion como argumento, puede ser variable
En línea

La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con realloc - c
« Respuesta #3 en: 5 Noviembre 2012, 02:26 am »

La idea era ir copiando caracter por caracter a un nuevo string sin los espacios en blanco e ir reservando memoria a medida que la fuera necesitando
No es necesario reservar el bloque de memoria antes de inserción, en su lugar haces una con el tamaño máximo (el peor escenario) y reajustas solo después de leer todos los caracteres. Para obtener el tamaño de la cadena puedes utilizar la función "strlen" (prototipo en <string.h>) o un bucle.

Por ejemplo (sin validación de errores):
Código
  1. #include <string.h>
  2. #include <ctype.h>
  3.  
  4. /* ... */
  5.  
  6. char *borrar_espacios(const char *s)
  7. {
  8.   char *t = malloc(strlen(s) + 1);
  9.   int i;
  10.  
  11.   for (i = 0; *s != '\0' && *s != '\n'; s++)
  12.      if (!isspace(*s))
  13.         t[i++] = *s;
  14.   t[i++] = '\0';
  15.  
  16.   t = realloc(t, i);
  17.  
  18.   return t;
  19. }

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
naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Problema con realloc - c
« Respuesta #4 en: 5 Noviembre 2012, 02:27 am »

Necesitas otro apuntador para que vaya avanzando y si te fijas cuando haces realloc nunca varías el tamaño del bloque. Deberías inicializar i en 1 y pasarle el valor de i a realloc como el nuevo tamaño.

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

EDIT: Puedes optar por lo que te dijo rir3760.
PD: Recuerda que debes liberar la memoria reservada dinámicamente.
« Última modificación: 5 Noviembre 2012, 02:29 am por naderST » En línea

HRSLASH

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: Problema con realloc - c
« Respuesta #5 en: 5 Noviembre 2012, 02:51 am »

naderST y rir3760 muchas gracias por sus respuestas. Finalmente he optado por hacer lo que dijo rir3760.  :D

Saludos!!
En línea

La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
API parecida a realloc
Ingeniería Inversa
.:UND3R:. 3 1,789 Último mensaje 6 Octubre 2011, 17:56 pm
por Иōҳ
Problema con realloc :(
Programación C/C++
sherry_XD 4 1,745 Último mensaje 4 Julio 2014, 17:38 pm
por do-while
¿Como funciona exactamente realloc()?
Programación C/C++
marcoma 4 2,156 Último mensaje 18 Agosto 2015, 11:36 am
por Eternal Idol
Problema con realloc en un bucle
Programación C/C++
SheKeL_C$ 4 1,697 Último mensaje 18 Marzo 2016, 18:04 pm
por SheKeL_C$
Duda con realloc
Programación C/C++
mester 5 2,533 Último mensaje 6 Septiembre 2016, 18:29 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines