Утечки памяти преследовали программы на языке С с тех пор, как существует этот язык. Было предложено множество решений, вплоть до идеи переписать программы на языке C на других языках. Но есть лучший способ.
Здесь представлено простое решение, которое устранит утечки памяти в каждой программе на языке C. Используйте этот модуль с вашей программой, и утечки памяти останутся в прошлом.
#include <dlfcn.h>
#include <stdio.h>
struct leaksaver {
struct leaksaver *next;
void *pointer;
} *bigbucket;
void *
malloc(size_t len)
{
static void *(*nextmalloc)(size_t);
nextmalloc = dlsym(RTLD_NEXT, "malloc");
void *ptr = nextmalloc(len);
if (ptr) {
struct leaksaver *saver = nextmalloc(sizeof(*saver));
saver->pointer = ptr;
saver->next = bigbucket;
bigbucket = saver;
}
return ptr;
Пояснение автора кода в оригинале:
Every allocated pointer is saved in the big bucket, where it remains accessible. Even if no other references to the pointer exist in the program, the pointer has not leaked.
It is now entirely optional to call free. If you don’t call free, memory usage will increase over time, but technically, it’s not a leak. As an optimization, you may choose to call free to reduce memory, but again, strictly optional.
Problem sovled!