[Solved] Best practices for debugging memory corruption and free() woes?

Since your current system seems to need four two byte chunks of memory, I'd be inclined to declare a static array of structs including a flag to indicate in use/free and manage their use myself. In this case you could likely afford to make it many times bigger than four entries to deal with edge cases. Full on garbage collection seems overkill for a microcontroller.