3

У меня есть утечка памяти, которую я пытаюсь выследить в моей программе mfc. Обычно я хотел бы сделать что-то вроде следующего:ошибка C2661: «CObject :: operator new»: не перегружена функция принимает 4 аргумента

заголовочный файл

// Leak Detection 
#if defined(WIN32) && defined(_DEBUG) 
    #define _CRTDBG_MAP_ALLOC 
    #include <stdlib.h> 
    #include <crtdbg.h> 
#endif 

файл каст

// Leak detection 
#if defined(WIN32) && defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) 
    #ifdef DEBUG_NEW 
     #undef DEBUG_NEW 
    #endif 
    #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) 
    #define new DEBUG_NEW 
#endif 

Этот метод хорошо работает в большинстве файлов, но когда я включаю его в некоторых файлах, таких как мой документ, я получаю ошибку: ошибка C2661: «CObject :: operator new»: нет перегруженной функции принимает 4 аргумента

Какое решение здесь? Должен ли я быть # новым, где-то или что-то еще?

Спасибо!

+0

Педантно говоря '#define new DEBUG_NEW' вызывает неопределенное поведение (если я правильно помню). – Nawaz

+0

@Nawaz: Кажется, он отлично работает для других классов. Каким образом можно определить, где происходит утечка памяти? Похоже, это «рекомендованное Microsoft решение». Большинство профайлеров делают забавные вещи с моим кодом. – Jordan

+0

Правильный способ сделать это - заменить новые и удалить операторы для вашего класса или глобально. –

ответ

1

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

Либо вы можете прокомментировать или удалить блок определения DEBUG_NEW, предполагая, что он больше не нужен для улавливания утечек памяти. Или, если вам все еще нужно, оставьте его, как это и использовать

#ifdef _DEBUG 
#undef new 
    CMyOject* pMyObjectInst = new CMyObject(); 
#define new DBG_NEW 
#endif 

Итак, вы неопределенное новый раз перед созданием объекта (см номера строк в Списке ошибок) и переопределить его снова сразу же после того, как, так что любой утечки памяти, которые возникают после создания этого объекта, все еще могут быть идентифицированы.

1

У меня есть аналогичная проблема, связанная с помещением #define new DEBUG_NEW до #include ... операторов в .cpp-файл. Изменение порядка разрешило мою проблему.