Extraño problema con free() #80
Replies: 2 comments 2 replies
-
Revisando el código de error que me daba el make ( char* cadena = malloc_char(capacidad);
printf("Direccion del puntero antes de asignar valor %p\n", cadena);
cadena = "Anda la osa";
printf("Direccion del puntero luego de asignar valor %p\n", cadena);
duplicar_test("Test 1", capacidad, cadena);
printf("Direccion del puntero luego de la prueba %p\n", cadena); Y descubrí, horrorizado, que el acto de asignar un valor "manualmente" (tipo
¿Tal vez está realocando la memoria al asignarle un valor? El Para el caso de la función que puse al principio de mi primer pregunta, el error saltaba al pasar por esta parte del código: cadena = malloc_char(2);
cadena = "0"; // ESTA LINEA EN PARTICULAR, LA DE ASIGNACION MANUAL DE VALOR
*capacidad = 2; Alteré el algoritmo para que nunca le asigne un valor "manualmente" y dejó de dar error. Sin embargo, en el código de prueba no tengo esa opción. La única solución que se me ocurre de momento es olvidarme del |
Beta Was this translation helpful? Give feedback.
-
Es que si tenes una variable de tipo puntero, la asignación directa, modifica el puntero, no el contenido.
Es una cadena del segmento de texto mezclada con una del heap; estás reemplazando direcciones, mezclando segmentos. Y despues estas intentando liberar algo que esta fuera del segmento correcto |
Beta Was this translation helpful? Give feedback.
-
Link al codigo en cuestión: https://github.com/INGCOM-UNRN-P1/tp5-2024-curambar/blob/7fe9a6b851de3e5ca6263e1757ad15e397ca5fb5/ejercicio3/prueba.c#L263
Me encontré con un error muy extraño. Ocurre en dos lugares. El primer lugar es en las pruebas para la funcion de conversion de enteros a cadenas, donde tengo el siguiente codigo:
La función de conversión en sí es la siguiente:
Y las pruebas que estoy ejecutando son estas:
Dado el contexto, el error que me encuentro es al ejecutar la 3er prueba, el my_free repentinamente falla.
Por cierto, este es my_free:
Este es el resultado en consola de las pruebas:
Debugueando con printf, encontré que el punto de falla es my_free. Por qué falla justo en esa prueba, no lo sé. Las cadenas estan bien formadas, verificado el terminador con la funcion "rayos-X" y todo.
Este my_free está en TODAS las funciones de prueba que hice, pero solo en esta ultima instancia de prueba falla.
No es el unico lugar donde hay error de este tipo. En otras pruebas falla el my_free si lo quiero usar en el main. En el siguiente caso, las lineas de my_free están comentadas porque en otro caso fallan.
la funcion malloc_char es esta:
Beta Was this translation helpful? Give feedback.
All reactions