У меня есть приложение .NET, которое использует библиотеку сжатия C++ с открытым исходным кодом для сжатия изображений. Мы получаем доступ к библиотеке C++ через управляемый C++. Я вижу повреждение кучи во время сжатия. Вызов _CrtIsValidHeapPointer обнаруживает ошибку при вызове free () при очистке после сжатия.
Существуют ли такие инструменты, как Очистить, чтобы помочь диагностировать эту проблему и что вызывает повреждение кучи при работе с комбинацией управляемого и неуправляемого кода? У меня есть исключение, обнаруженное в отладчике, но было бы неплохо иметь другие инструменты, которые помогут найти решение проблемы.





Rational Purify для Windows поддерживает .NET, так что я думаю, это можно было бы использовать.
В машинном коде, если повреждение всегда происходит в одном и том же месте памяти, вы можете использовать точка останова по данным, чтобы сломать отладчик при изменении этой памяти. К сожалению, вы не можете установить точку останова по данным в управляемой среде C++, предположительно потому, что сборщик мусора может перемещать объект в памяти.
Не уверен, что это поможет, но, надеюсь, это приведет вас в правильном направлении.
В прошлый раз, когда я использовал Purify, если вы используете управляемый код в своем приложении, он даже не пытается отслеживать неуправляемую память, а просто показывает размер управляемой кучи и время возникновения сборок мусора. В полностью неуправляемом приложении Purify - спаситель жизни!