Summary
Put things back where you found them: Allocating memory in one module and deallocating it in a different module makes your program fragile by creating a subtle long-distance dependency between those modules. They must be compiled with the same compiler version and same flags (notably debug vs. NDEBUG ) and the same standard library implementation, and in practice the module allocating the memory had better still be loaded when the deallocation happens.