struct remember_alloc; // ???
struct remember_alloc
{
struct remember_alloc *next;
void *addr;
};
what is happening here, why the double declaration (see: ???)
Not a double declaration; The "empty" statement is a declaration, the
second is a definition. A declaration (or "forward declaration") lets
the compiler know that there is code for a symbol like this somewhere
(same source file or other linked in file). Often you find them at the
top of the source while the definition follows in the code "body"
somewhere - and has the actual function.