Перевірка програм у поєднанні з інструментами налагодження для Windows - це дивовижна настройка. Ви можете отримати як частину комплекту драйверів для Windows, чи легший SDK для Windows . (Дізнався про програму перевірки додатків, коли вивчав попереднє питання щодо проблеми з корупцією купи .) У минулому я також використовував BoundsChecker та Insure ++ (згадані в інших відповідях), хоча мене здивувало, наскільки функціональність була у програмі перевірки додатків.
Електричні огорожі (aka "efence"), dmalloc , valgrind тощо - все, що варто згадати, але більшість із них набагато простіше запуститись під * nix, ніж Windows. Valgrind є смішно гнучким: я налагодив велике серверне програмне забезпечення з багатьма проблемами купи.
Коли все інше не вдасться, ви можете надати своєму власному глобальному оператору нове / видалення та malloc / calloc / realloc перевантаження - як це зробити, буде дещо відрізнятися залежно від компілятора та платформи - і це буде трохи інвестицій - але це може окупитися в довгостроковій перспективі. Список бажаних функцій повинен виглядати знайомим з dmalloc та electricfence, і напрочуд чудова книга Writing Solid Code :
- значення дозорних : дозволяють трохи більше місця перед і після кожного аллоку, дотримуючись вимоги максимальної вирівнювання; заповнення магічними цифрами (допомагає вловлювати переливи та підтоки буфера та випадкові "дикі" вказівники)
- alloc fill : заповнити нові асигнування магічним значенням non-0 - Visual C ++ вже зробить це для вас у налагодженнях налагодження (допомагає задіяти використання неініціалізованих vars)
- безкоштовне заповнення : заповніть звільнену пам’ять з магічним значенням не 0, розробленим для запуску сегмента за замовчуванням, якщо воно в більшості випадків відмежоване (допомагає ловити звисаючі покажчики)
- відкладено безкоштовно : не повертайте звільнену пам’ять у купу на деякий час, тримайте її безкоштовно заповненою, але недоступною (допомагає ловити більше звисаючих покажчиків, ловить найближчі подвійні вільні)
- відстеження : можливість запису, де було здійснено розподіл, іноді може бути корисним
Зауважте, що в нашій локальній системі домашнього домашнього перекладу (для вбудованої цілі) ми відстежуємо відстеження від більшості інших речей, оскільки накладні витрати на виконання набагато вище.
Якщо вас цікавить більше причин для перевантаження цих функцій / операторів розподілу, подивіться на мою відповідь "Будь-яка причина для перевантаження глобального оператора новим та видаленням?" ; безсоромне саморекламування, окрім того, у ньому перераховані інші методи, які корисні для відстеження помилок корупції, а також інші застосовні інструменти.
Оскільки я постійно шукаю тут свою власну відповідь, коли шукаю значення значень alloc / free / ogra / MS, тут використовується ще одна відповідь, яка охоплює значення заповнення Microsoft dbgheap .