23 / 23 / 4
Регистрация: 13.03.2011
Сообщений: 326
1

Обнаружение утечки памяти, перегрузка new/delete

07.09.2016, 19:19. Показов 407. Ответов 0

Здравствуйте! На КиберГуру есть статья, в которой расписано как обнаруживать утечку памяти. http://www.cyberguru.ru/progra... etect.html
Там приводятся отрывки кода, которыми надо заполнить stdafx.h. Я попробовал, но у меня не получилось Не могли бы вы помочь собрать отрывки в работоспособный код?

P.S. желательно под 2010 студию

мой некомпилирующийся вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#ifdef _DEBUG
#define DEBUG_NEW new(__FILE__, __LINE__)
#else
#define DEBUG_NEW new
#endif
//#define new DEBUG_NEW
#include <stdlib.h>
#include <malloc.h>
#include <IntSafe.h>
#include <list>
 
typedef struct {
    DWORD   address;
    DWORD   size;
    char    file[64];
    DWORD   line;
} ALLOC_INFO;
 
typedef list<ALLOC_INFO*> AllocList;
 
AllocList *allocList;
 
void AddTrack(DWORD addr,  DWORD asize,  const char *fname, DWORD lnum)
{
    ALLOC_INFO *info;
 
    if(!allocList) {
        allocList = new(AllocList);
    }
 
    info = new(ALLOC_INFO);
    info->address = addr;
    strncpy(info->file, fname, 63);
    info->line = lnum;
    info->size = asize;
    allocList->insert(allocList->begin(), info);
};
 
void RemoveTrack(DWORD addr)
{
    AllocList::iterator i;
 
    if(!allocList)
        return;
    for(i = allocList->begin(); i != allocList->end(); i++)
    {
        if((*i)->address == addr)
        {
            allocList->remove((*i));
            break;
        }
    }
};
 
 
#ifdef _DEBUG
inline void * __cdecl operator new(unsigned int size,
    const char *file, int line)
{
    void *ptr = (void *)malloc(size);
    AddTrack((DWORD)ptr, size, file, line);
    return(ptr);
};
inline void __cdecl operator delete(void *p)
{
    RemoveTrack((DWORD)p);
    free(p);
};
#endif
Добавлено через 20 часов 45 минут
У С++/CLI оказывается есть gcnew

Неактуально.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.09.2016, 19:19
Ответы с готовыми решениями:

Утечки памяти
Не могу найти и &quot;убить&quot; в программе СЕМЬ утечек памяти. Уже впору вешаться. Архив с полным...

Обнаружение утечки памяти
Как обнаружить утечку в памяти в VS2017? В данном варианте выдает 3 предупреждения // Для...

Утечки памяти и обнаружение места
При закрытии программы появляются сообщения: http://s015.***********/i331/1210/fd/d40f8cbe31cf.jpg...

Утечки памяти при использовании new/delete для двумерных массивов
Добрый день. Суть в том, что есть несколько функций, получающих на вход и возвращающих двумерные...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2016, 19:19

Как избежать утечки памяти при данном выделении памяти?
Всем привет. В проекте MFC делаю следующие манипуляции MY_STRUCT *ms = new MY_STRUCT();...

Утечки памяти без выделения памяти?
Человек использует _CrtDumpMemoryLeaks() для отлова утечек, и обратился ко мне в сязи с тем, что...

Утечки памяти
Привет всем! Есть процедура, в которую параметрами передаются дин. массивы. Например: type ...

Утечки памяти
Здравствуйте, уважаемые господа. Недавно заметил через диспетчер задач, что в моей программе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru