Почему обнаружение утечки не дает мне номера строк?

Я недавно конвертировал программу с использованием сырых указателей на std::shared_ptrи хотел убедиться, что не было утечки памяти. Я посмотрел на MSDN Обнаружение утечек памяти с помощью библиотеки CRT и следуйте инструкциям по настройке отчета.

Я начинаю с добавления этих строк в мой файл:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

и вызвать отчет с — _CrtDumpMemoryLeaks();

Я действительно использую new выделить свою память так, как предлагает страница, я добавил …

#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#define new DBG_NEW
#endif
#endif  // _DEBUG

без существенных изменений в плане более точного определения места утечки. Вместо этого мой отчет по-прежнему выглядит так:

Detected memory leaks!
Dumping objects ->
{158} normal block at 0x006F8458, 8 bytes long.
Data: <  ,     > DC F6 2C 00 00 00 00 00
{155} normal block at 0x006FAD40, 40 bytes long.
Data: <L>              > 4C 3E 17 01 03 00 00 00 01 00 00 00 CD CD CD CD
{154} normal block at 0x006FAB68, 16 bytes long.
Data: <d>              > 64 3E 17 01 01 00 00 00 01 00 00 00 00 00 00 00
{149} normal block at 0x006FAC08, 40 bytes long.
Data: <L>              > 4C 3E 17 01 03 00 00 00 01 00 00 00 CD CD CD CD
{148} normal block at 0x006FABB8, 16 bytes long.
Data: <d>              > 64 3E 17 01 01 00 00 00 01 00 00 00 00 00 00 00
Object dump complete.
The program '[7152] List.exe' has exited with code 0 (0x0).

К сожалению, отчет генерируется непосредственно перед выходом, поэтому невозможно увидеть утечку в реальном времени.

Глядя на ответ на это вопрос Я заметил, что я не загружал файл pdb из-за того, что это пустой проект. Поэтому я последовал совету Вот которая исправила проблему с pdb, но не смогла решить мою проблему.

Приложение было сгенерировано из пустого консольного приложения, если это имеет значение, и я работаю от имени администратора.

Также я знаю о внешних инструментах, которые я мог бы использовать, но я часто использую компьютеры, для которых у меня нет разрешения на их добавление, поэтому правильное функционирование VS является идеальным решением. Любая помощь в получении отчета, показывающего номера строк утечек, будет отличной.

Примечание:

Я полагаю, логичный вопрос, который нужно задать, — если вы используете управляемые указатели, почему у меня все еще есть утечка памяти? Ну, я оставил пару локализованных указателей, которые являются только временными метками и т. Д., Которые, по-видимому, не должны были вызывать проблему. Итак, я чувствую, что знаю, где это происходит, но это такая простая программа, я хотел бы знать, как это сделать, чтобы я мог использовать ее на более крупных. Благодарю.

2

Решение

Вы должны убедиться, что определения и включение stdlib находятся перед любыми другими включениями в приложение.

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#define new DBG_NEW
#endif
#endif  // _DEBUG

Должно быть самой первой вещью в вашем приложении.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]