Según lo sugerido, ya existen excelentes herramientas como Valgrind para hacer esto.
adicional:
me gustaría hacer esto sin ningún tipo de utilidades externas para la práctica
Esto es interesante y estoy seguro estaría cumpliendo,
Puede utilizar truco macro para detectar tales uso de memoria y errores de fuga, de hecho, escriba su propio detector de fugas ordenado. Debería poder hacer esto siempre que tenga una sola función de asignación y desasignación en su proyecto.
#define malloc(X) my_malloc(X, __FILE__, __LINE__, __FUNCTION__)
void* my_malloc(size_t size, const char *file, int line, const char *func)
{
void *p = malloc(size);
printf ("Allocated = %s, %i, %s, %p[%li]\n", file, line, func, p, size);
/*Link List functionality goes in here*/
return p;
}
Mantiene una lista vinculada de direcciones asignadas con el archivo y el número de línea desde donde se asignó. Actualiza la lista de enlaces con entradas en su malloc
.
Al igual que en el ejemplo anterior, puede escribir una implementación para free
, en la que verifica las entradas de dirección que se piden para ser liberadas en su lista vinculada. Si no hay entradas coincidentes, se trata de un error de uso y puede marcarlo.
Al final de su programa imprime o escribe el contenido de su lista vinculada a un archivo de registro. Si no hay filtraciones, su lista vinculada no debería tener entradas, pero si hay algunas filtraciones, entonces el archivo de registro le brinda la ubicación exacta de donde se asignó la memoria.
Tenga en cuenta que al usar este macro truco, pierde el tipo de comprobación que ofrecen las funciones, pero es un pequeño truco que utilizo muchas veces.
Espero que esto ayude y todo lo mejor :)
¿Qué pasa con Valgrind? –
@MitchWheat mencioné que no puedo usar ningún servicio externo –
Bueno, si esto es para aprender, podrías aprender sobre cómo lo hace valgrind ... –