Título: Concatenar cadenas con memoria dinámica en lenguaje C. Publicado por: NOB2014 en 19 Junio 2016, 14:33 pm Hola, gente.
Les quito un poco de tiempo porque si bien estoy leyendo que es lo que causa el doble free no logro solucionarlo por mí mismo y si lo lograra me quedarían dudas en la función concatenar, les digo esto porque si bien logre que no me diera error en la compilación lo hice a fuerza de prueba/error/solución pero no teniendo claro que es lo que estaba haciendo. - Las cosas que no me quedan claras: 1): Porque debo hacer que la función se declare como un puntero a función. 2): Porque el error del doble free. 3): Como se hace para poner un espacio entre las dos frases (por programación, claro).- Código
Saludos y desde ya muchas gracias. - Título: Re: Doble free. Publicado por: AlbertoBSD en 19 Junio 2016, 15:41 pm 1): Porque debo hacer que la función se declare como un puntero a función. Es el tipo de dato que devuelve la funcion, no es que sea un puntero a funcion, es una funcion que devuelve un tipo de dato ; Código
No veo ningun doble free en tu codigo. Lo que veo es que estas tratando de liberar una sección de memoria no liberable. Esto es que solo puedes liberar memoria reservada por malloc, calloc y realloc pero tu apuntador posteiormente apunta a origUno por el strcat que haces incorrectamente. Segun: Código Reservas memoria el buffer completo pero despues reasignas el valor de arr a la direccio de origUno. Código que seria la direccion de origUno... Necesitas primero realizar un strncpy de origUno a arr y luego realizar la concatenacion. Sobre el espacio tendrias que hacer: Código Nota que uso strcpy y no strncpy ya que como capturaste correctamente origUno y reservastes memoria suficiente para arr no hay riesgo de bufferoverflow. En cualquier otro caso usaria strncpy... Saludos Título: Re: Doble free. Publicado por: NOB2014 en 19 Junio 2016, 19:11 pm Hola, Alberto. -
Muchas gracias amigo funciona a la perfección, pero igual me queda una duda y es que al tener un espacio creado con: Código ¿no debería reservar un espacio más? Código Un abrazo. Título: Re: Doble free. Publicado por: AlbertoBSD en 19 Junio 2016, 19:22 pm Así es se me paso comentar eso.
Debería de ser +2 en lugar de +1. Saludos. |