Как я могу создать файл с информацией, сгенерированной _CrtDumpMemoryLeaksC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Как я могу создать файл с информацией, сгенерированной _CrtDumpMemoryLeaks

Сообщение Гость »


Я пытаюсь реализовать создание файла журнала на основе инструментов отладки CRT, до сих пор я специально создал простой файл с некоторыми утечками, просто чтобы посмотреть, как он работает.

#include "OtherSource.h" #include #include int Simulation::SimulateLeak() { #ifdef _DEBUG _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); #endif int* offset_x = DBG_NEW int; int* offset_y = DBG_NEW int; if (offset_x == NULL || offset_y == NULL) { возврат 1; } *offset_x = 10; *offset_y = 20; удалить offset_x; #ifdef _DEBUG _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG); _CrtDumpMemoryLeaks(); #endif вернуть 0; } Затем я попробовал то, что мне показалось простым: создать файл, получить информацию об утечке памяти и записать в него информацию, даже CRT предлагает что-то под названием _CrtSetReportFile()

поэтому я попытался что-то реализовать с его помощью

#include "OtherSource.h" #include #include int Simulation::SimulateLeak() { #ifdef _DEBUG _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); #endif // Устанавливаем файл, в который должен поместиться отчет ФАЙЛ* LeakReportFile = fopen("MemoryLeakReport.txt", "w"); _CrtSetReportFile(_CRT_WARN, LeakReportFile); int* offset_x = DBG_NEW int; int* offset_y = DBG_NEW int; if (offset_x == NULL || offset_y == NULL) { возврат 1; } *offset_x = 10; *offset_y = 20; удалить offset_x; #ifdef _DEBUG _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG); _CrtDumpMemoryLeaks(); #endif // Закрываем файл после дампа утечек памяти fclose(leakReportFile); вернуть 0; } Файл действительно создан, но даже несмотря на то, что в выводе возникают утечки памяти

Обнаружены утечки памяти! Сброс объектов -> C:\C++\CRTDebugTest\CRTDebugTest\Source.cpp(10) : {183} обычный блок по адресу 0x000002CEAFE21FF0, длиной 4 байта. Данные: 28 00 00 00 C:\C++\CRTDebugTest\CRTDebugTest\OtherSource.cpp(29) : {181} обычный блок по адресу 0x000002CEAFE22570, длина 4 байта. Данные: < > 14 00 00 00 C:\C++\CRTDebugTest\CRTDebugTest\OtherSource.cpp(28) : {180} обычный блок по адресу 0x000002CEAFE21BF0, длина 4 байта. Данные: < > 0A 00 00 00 Дамп объекта завершен. Мой файл пуст. Что я делаю не так или чего не хватает? Пожалуйста, помогите
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»