Se você puder alterar o código-fonte, Dmalloc é ótimo; ele listará quais ponteiros foram unfreed e (para código construído com símbolos de depuração) exatamente em qual linha eles foram alocados.
Se você não pode, Valgrind é praticamente o padrão para esse tipo de coisa. Eu geralmente acho Valgrind um pouco mais difícil de usar, mas tem muito mais recursos e não envolve adicionar chamadas dmalloc em seu código