Обнаружение использования после free () на окнах. (висячие указатели) - PullRequest
3 голосов
/ 13 марта 2010

Я пытаюсь обнаружить ошибки "Use after free ()", также известные как "Dangling pointers". Я знаю, что Valgrind можно использовать для обнаружения ошибок «Использовать после освобождения» на платформе * nix, но как насчет окон? Что если у меня нет источника? Есть ли лучшая программа, чем Valgrind, для обнаружения всех висячих указателей в программе? Свободный и открытый исходный код был бы предпочтительным, но я буду использовать коммерческое решение, если оно выполнит свою работу.

Ответы [ 9 ]

5 голосов
/ 13 марта 2010

Распределитель памяти MSVC уже делает это. Когда вы получаете 0xfeeefeee от разыменования указателя, вы зависли. Если повезет, что бомбить программу.

5 голосов
/ 13 марта 2010

Вы можете использовать gflags.exe и Средства отладки для Windows , чтобы включить проверку кучи в процессе:

Прошло много времени с тех пор, как я использовал это, и я, честно говоря, не могу вспомнить, насколько хорошо он взаимодействует с кучей времени выполнения C, в отличие от диспетчера кучи Windows (чтобы каждый malloc() / free() / new / delete звонок проверяется отдельно).

Бесплатно, но не с открытым исходным кодом.

3 голосов
/ 13 марта 2010

Это не так хорошо, как Valgrind, но Microsoft Application Verifier выполняет аналогичную функцию для Windows. Это также позволит вам смоделировать условия ошибки для большинства API, чтобы сообщить вам, что может произойти, если ваш самый важный клиент взорвется:)

2 голосов
/ 13 марта 2010

Несколько лет назад я использовал Purify для этой цели.Это было вокруг в течение долгого времени и было довольно хорошо, когда я использовал это.

1 голос
/ 19 марта 2011

См. CheckPointer, наш Проверка безопасности памяти для C . Требуется, чтобы у вас был исходный код, но он работает на Wndows.

0 голосов
/ 13 марта 2010

После free () установить значение указателя в 0 и ждать фейерверка?

0 голосов
/ 13 марта 2010

Проверка куча отладки Windows . Это не с открытым исходным кодом, но работает.

0 голосов
/ 13 марта 2010

DieHard - это еще одна альтернатива, на которую стоит обратить внимание. Он находится на веб-сайте HOARDE, который, к сожалению, похоже, использует фреймы, поэтому вам нужно поискать в левосторонней навигации DieHard.

0 голосов
/ 13 марта 2010

NuMega BoundsChecker используется, чтобы поймать этот материал. Не уверен, что они все еще в бизнесе ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...