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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  (Ayuda) Programa crashea al analizar una cadena (char *)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: (Ayuda) Programa crashea al analizar una cadena (char *)  (Leído 6,156 veces)
Peregring-lk

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: (Ayuda) Programa crashea al analizar una cadena (char *)
« Respuesta #10 en: 27 Mayo 2015, 01:59 am »

Cuando haces un `realloc`, si no hay espacio para añadir un elemento más en la localización actual, `realloc` te mueve el vector a una posición diferente, y dicha nueva dirección de memoria, se devuelve. Debes asignar dicho nuevo valor:

Código
  1. _value = (char*)realloc(_value, num_characters + 1);

Aunque si trabajas en C++, utiliza los `castings` correspondientes (ya que `realloc` devuelve un puntero de tipo `void*`):

Código
  1. _value = static_cast<char*>(realloc(_value, num_characters + 1));


« Última modificación: 27 Mayo 2015, 02:12 am por Peregring-lk » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: (Ayuda) Programa crashea al analizar una cadena (char *)
« Respuesta #11 en: 27 Mayo 2015, 02:44 am »

No olvidar validar el puntero devuelto por realloc, éste podria ser un valor nulo asi que  se sobreescribiria la variable con el puntero valido a la memoria dinamica como resultado dando una fuga de memoria. Además porqué no simplemente usar memcpy o strcpy para copiar las cadenas de entrada en lugar de usar un for y tener multiples variables. algunos compiladores puede que no optimizen esas partes.

Veo que estás implementado una especie de std::string, puede que estes interesado en hecharlo un vistazo a las librerias del compilador (VC++):
%ProgramFiles%\Microsoft Visual Studio <Version>\VC\crt\src

O unas más "claras" y simples:
http://www.keithschwarz.com/interesting/

->  code/string/String.cpp.html

-

Acerca del problema usando el compilador, no es especifico del compilador y más bien deberias de estar feliz que VC++ agrega comprobadores para detectar que se está escribiendo en memoria no reservada y corrompiendo memoria del heap.


« Última modificación: 27 Mayo 2015, 02:56 am por x64Core » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: (Ayuda) Programa crashea al analizar una cadena (char *)
« Respuesta #12 en: 27 Mayo 2015, 03:33 am »

http://www.cplusplus.com/reference/cstdlib/realloc/

Return Value
A pointer to the reallocated memory block, which may be either the same as ptr or a new location. The type of this pointer is void*, which can be cast to the desired type of data pointer in order to be dereferenceable.

Si realloc no devuelve _value estas escribiendo en cualquier lado (memoria liberada).

PD. El que llame a toString tiene que liberar la memoria que este reserva.
« Última modificación: 27 Mayo 2015, 03:36 am por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: (Ayuda) Programa crashea al analizar una cadena (char *)
« Respuesta #13 en: 27 Mayo 2015, 03:54 am »

http://www.cplusplus.com/reference/cstdlib/realloc/

Si realloc no devuelve _value estas escribiendo en cualquier lado (memoria liberada).

Si realloc devuelve un nulo, el puntero a memoria es aún valido, la memoria no es liberada ;D
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: (Ayuda) Programa crashea al analizar una cadena (char *)
« Respuesta #14 en: 27 Mayo 2015, 09:18 am »

Si realloc devuelve un nulo, el puntero a memoria es aún valido, la memoria no es liberada ;D

Si, por eso deberia asignar el valor devuelto en una tercera variable momentaneamente (aunque me imagino que esta fallando por el otro caso no contemplado).
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como pasar una cadena char a hexadecimal por argumento a un constant char?
Programación C/C++
ahaugas 3 5,694 Último mensaje 13 Enero 2013, 14:09 pm
por ahaugas
Me crashea el programa « 1 2 »
Programación C/C++
jaxoR 16 7,327 Último mensaje 14 Marzo 2014, 07:02 am
por leosansan
Me crashea el programa
Programación C/C++
jaxoR 2 2,425 Último mensaje 30 Mayo 2014, 02:42 am
por Yoel Alejandro
(Ayuda) Programa crashea al acceder al último término de una matriz
Programación C/C++
Seyro97 1 1,716 Último mensaje 2 Octubre 2015, 08:11 am
por Seyro97
¿AYUDA por que este programa crashea?
Programación C/C++
Mozzard 9 2,381 Último mensaje 6 Octubre 2018, 10:50 am
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines