Depuración de la corrupción de la memoria

Anteriormente encontré un problema con la memoria dinámica en C (estudio visual). Tuve un programa más o menos funcional que arrojó un error de tiempo de ejecución al liberar uno de los buffers. Era una corrupción de memoria clara, escribió el programa al final del búfer.

Mi problema es que tardó mucho tiempo en localizarlo. El error se desechó después de la corrupción, y tuve que depurar manualmente toda la ejecución para encontrar cuándo se sobrescribe el final del búfer.

¿Hay alguna herramienta o forma de ayudar a localizar este problema? Si el programa hubiera fallado de inmediato, habría encontrado el problema mucho más rápido ...

Un ejemplo del problema:

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

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

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

Respuestas a la pregunta(4)

Su respuesta a la pregunta