Como depurar erros de corrupção de heap?

Eu estou depurando um aplicativo C ++ (nativo) multi-threaded sob Visual Studio 2008. Em ocasiões aparentemente aleatórias, recebo um erro "O Windows acionou um ponto de interrupção ..." com uma observação que isso pode ser devido a uma corrupção no heap. Esses erros nem sempre travam o aplicativo imediatamente, embora seja provável que ele falhe logo após.

O grande problema com esses erros é que eles aparecem apenas após a ocorrência da corrupção, o que os torna muito difíceis de rastrear e depurar, especialmente em um aplicativo multi-threaded.

Que tipo de coisas podem causar esses erros?

Como faço para depurá-los?

Dicas, ferramentas, métodos, esclarecimentos ... são bem-vindos.

questionAnswers(14)

yourAnswerToTheQuestion