In the following code, there is a memory leak if Info::addPart1() is called multiple times by accident:
Info::addPart1()
typedef struct { }part1; typedef struct { }
On the far extreme of possible ways to deal with memory leaks is the boehm garbage collector, a conservative mark & sweep collector. Interestingly, this can be used in addition to all the good advice offered in other answers.