Практическое руководство. Использование отладочной кучи
Этот раздел применим к:
Выпуск |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
![]() |
![]() |
![]() |
Только машинные коды |
![]() |
Pro, Premium и Ultimate |
![]() |
![]() |
![]() |
Только машинные коды |
![]() |
Все функции кучи, такие как malloc, free, calloc, realloc, new и delete, разрешают своим отладочным эквивалентам действовать в отладочной куче. Когда освобождается блок памяти, отладочная куча автоматически проверяет целостность буферов по обеим сторонам выделенной области и выдает отчет об ошибке в случае их перезаписи.
Использование отладочной кучи
- Свяжите отладочное построение приложения с отладочной версией библиотеки CRT.
Изменение одного или более битовых полей флага _crtDbgFlag и создание нового состояния флага
Вызовите _CrtSetDbgFlag с параметром newFlag, равным _CRTDBG_REPORT_FLAG (чтобы получить текущее состояние _crtDbgFlag), и сохраните возвращенное значение во временной переменной.
Включите любые биты, применив операцию побитового OR для этой временной переменной и соответствующей битовой маски (представленной в коде приложения константой манифеста).
Отключите остальные биты, применив побитовую операцию AND (символ амперсанда "&") для переменной и NOT (символ тильды "~") соответствующей битовой маски.
Вызовите _CrtSetDbgFlag с параметром newFlag со значением, сохраненным в этой временной переменной, чтобы создать новое состояние для _crtDbgFlag.
Пример
Например, следующие строки кода включают автоматическое обнаружение утечек памяти и отключают проверку блоков типа _CRT_BLOCK:
// Get current flag
int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
// Turn on leak-checking bit.
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
// Turn off CRT block checking bit.
tmpFlag &= ~_CRTDBG_CHECK_CRT_DF;
// Set flag to the new value.
_CrtSetDbgFlag( tmpFlag );