Título: [Ayuda-C] Programación de MV; Punteros, malloc() y free() Publicado por: Miky Gonzalez en 13 Julio 2013, 13:39 pm Supongamos por un momento el siguiente código:
Código
Faltan muchas parte del código, pero está lo esencial para mi cuestión. Explico un poco el funcionamiento: Es una máquina virtual (¿dificil de saber?, no creo xD), en la que leo un archivo, calculo el tamaño, creo memoria dinamica para almacenar el contenido del archivo con malloc y fwrite respectivamente. Creo una variable con tipo estructura de la CPU de la MV, llamo a la funcion que me crea la CPU y le asigna el puntero. Despues libero la memoria del codigo (supuestamenta) y la de la CPU creada con la funcion crear_cpu, a través de la función borrar_cpu. Creo que estoy utilizando mal, o los punteros, o el uso de free(). No se porqué, ni dónde, ni cómo hacerlo bien. El programa funciona correctamente, pero creo que hay fugas de memoria. ¿Podrían solventar mi problema?. Título: Re: [Ayuda-C] Programación de MV; Punteros, malloc() y free() Publicado por: Khronos14 en 13 Julio 2013, 19:43 pm Puedes detectar los memory leaks con el programa Valgrind, es bastante bueno.
El código lo veo bastante bien, pero no me gustan las funciones que reservan memoria y devuelven su puntero. Es preferible que la función crear_cpu sea algo como esto: Código
Entonces en el main, la utilizas así: Código
Título: Re: [Ayuda-C] Programación de MV; Punteros, malloc() y free() Publicado por: amchacon en 13 Julio 2013, 23:41 pm Krono, tu código no tiene ningun sentido (creas un objeto en la pila, despues coges un puntero de la funcion crear_cpu (¡Memory leak!)).
El error del codigo principal, es porque cpu también tiene sus punteros. Tienes que borrar esos punteros antes de borrar la cpu. Título: Re: [Ayuda-C] Programación de MV; Punteros, malloc() y free() Publicado por: 0xDani en 13 Julio 2013, 23:44 pm @Khronos14, fíjate que en tu código le pasas la dirección de un objeto a una función, reservas memoria en una variable local (con lo que pierdes la dirección del objeto) y luego sales de la función. Con lo cual no haces nada.
EDIT: Se me ha adelantado @amchacon unos segundos xD Título: Re: [Ayuda-C] Programación de MV; Punteros, malloc() y free() Publicado por: Khronos14 en 14 Julio 2013, 01:21 am Cierto, es que copié su código y modifiqué partes. Arreglado.
Saludos. Título: Re: [Ayuda-C] Programación de MV; Punteros, malloc() y free() Publicado por: 0xDani en 14 Julio 2013, 13:52 pm Cierto, es que copié su código y modifiqué partes. Arreglado. Saludos. Aun así, todavía te inventas la variable cpu_init aquí: Código
Saludos. Título: Re: [Ayuda-C] Programación de MV; Punteros, malloc() y free() Publicado por: Miky Gonzalez en 14 Julio 2013, 15:26 pm Vale he utilizado el esquema de la función crear_cpu() de Khronos, queda algo como esto, por si puede ayudar a alguien:
Código
Para crear la CPU llamo a la función de la siguiente manera: Código
Cuando tenga terminado el código es muy posible que lo postee. Tiene una buena base, así que supongo que lo continuaré y añadiré funciones de E/S, Sockets, entre otras cosas. Gracias y saludos! |