Depurando corrupção de memória

Anteriormente encontrei um problema com a memória dinâmica em C (visual studio). Eu tinha um programa mais ou menos funcional que jogou um erro em tempo de execução ao liberar um dos buffers. Foi uma clara corrupção de memória, o programa escreveu no final do buffer.

Meu problema é que foi muito demorado rastrear. O erro foi jogado para baixo após a corrupção, e eu tive que depurar manualmente toda a corrida para encontrar quando é o fim do buffer substituído.

Existe alguma maneira de ajudar a rastrear esse problema? se o programa tivesse caído imediatamente eu teria encontrado o problema muito mais rápido ...

um exemplo do problema:

int *pNum = malloc(10 * sizeof(int));

//                 ||
//                 \/    
for(int i = 0; i < 13; i++)
{
pNum[i] = 3;
}

// error....
free(pNum);

questionAnswers(4)

yourAnswerToTheQuestion