Overloading free() so my program use mine instead of the system's-Collection of common programming errors

If you are looking for a standard way, I’m afraid it doesn’t exist. Redefining standard library names is undefined behavior.

C11, 7.1.3.2:

… If the program declares or defines an identifier in a context in which it is reserved (other than as allowed by 7.1.4), or defines a reserved identifier as a macro name, the behavior is undefined.

In 7.1.4, there are is a long explanation of how the library may define a macro with the same name as the function and how to bypass that macro. There is no indication of how a user may override a standard library function.

You can also see this question for more information.

Non standard ways are of course always possible as you can find in other answers.