Autor
|
Tema: Problema con realloc - c (Leído 3,188 veces)
|
HRSLASH
Desconectado
Mensajes: 33
|
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: char *borrar_espacios(const char *s) { char *temp = NULL; int i; temp = (char *) malloc(sizeof(char)); for (i = 0; *s != '\0'; ++s) temp = (char *) realloc(temp , sizeof(char)); *temp = *s, ++temp, ++i; } *temp = '\n'; return temp - i; }
Gracias de antemano!
|
|
« Ú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
|
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
Mensajes: 33
|
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
Mensajes: 1.639
|
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): #include <string.h> #include <ctype.h> /* ... */ char *borrar_espacios(const char *s) { int i; for (i = 0; *s != '\0' && *s != '\n'; s++) t[i++] = *s; t[i++] = '\0'; return t; }
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
|
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
Mensajes: 33
|
naderST y rir3760 muchas gracias por sus respuestas. Finalmente he optado por hacer lo que dijo rir3760. 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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
API parecida a realloc
Ingeniería Inversa
|
.:UND3R:.
|
3
|
2,507
|
6 Octubre 2011, 17:56 pm
por Иōҳ
|
|
|
Problema con realloc :(
Programación C/C++
|
sherry_XD
|
4
|
2,572
|
4 Julio 2014, 17:38 pm
por do-while
|
|
|
¿Como funciona exactamente realloc()?
Programación C/C++
|
marcoma
|
4
|
3,015
|
18 Agosto 2015, 11:36 am
por Eternal Idol
|
|
|
Problema con realloc en un bucle
Programación C/C++
|
SheKeL_C$
|
4
|
2,517
|
18 Marzo 2016, 18:04 pm
por SheKeL_C$
|
|
|
Duda con realloc
Programación C/C++
|
mester
|
5
|
3,740
|
6 Septiembre 2016, 18:29 pm
por MAFUS
|
|