К сожалению, я не могу говорить за мир Windows, но я знаю, что в мире Unix есть некоторые инструменты, которые делают это для вас (во время выполнения)
Идея состоит в том, чтобы реализовать функции выделения памяти вместе с некоторыми дополнительными проверками. Библиотеке может быть приказано прервать процесс при обнаружении проблемы, и вы можете найти проблему, посмотрев трассировку стека.
libumem на солярисе - один из примеров этого.
Я уверен, что на платформе Windows должны быть похожие вещи.
Существуют и другие инструменты, выполняющие статический анализ кода, которые помогут вам найти проблемы перед запуском кода. Coverity - один из примеров, и я думаю, что он работает и на Windows. Нам удалось найти немало потенциальных проблем с укрывистостью. К сожалению, это не бесплатно. Оценочные версии должны быть возможны, хотя.