Использование VS 2010. Уже проанализировали на утечку памяти. Теперь я хочу знать, выполняет ли скомпилированный код проверку границ. Я достаточно уверен, что это происходит для векторов и массивов, созданных в C ++; что я не знаю, распространяется ли проверка границ на объекты, созданные либо путем вызова таНос или с помощью новый ключевое слово. Если VS делает не проверка границ для такого случая, есть ли стороннее учреждение, которое делает это?
Отладочная CRT-куча будет выделять «буфер переполнения» вокруг нового блока памяти и проверять буфер на ожидаемое значение (0xFD), когда блок освобождается. Когда буфер переполнения содержит значения, отличные от ожидаемых, вы получите диалоговое окно с ошибкой проверки времени выполнения CRT. Это будет перехватывать записи, но не чтения. К сожалению, нет хорошего способа перехвата прочтения, если ваш процесс имеет доступ к читаемой странице.
Увидеть Управление памятью и куча отладки а также _CrtSetDbgFlag для дополнительной информации.
Массивы не границы проверяются по умолчанию в C ++, независимо от того, статически они или динамически размещены. Я использовал, чтобы использовать BoundsChecker для этого с Visual C ++. В Linux также есть valgrind, что приятно.