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.