2012-03-06 2 views
0

Я пытаюсь получить файл и строку, где происходит утечка с новым выражением new (std::nothrow).Кажется, я не могу использовать детектор утечки MS для нового выражения `new (std :: nothrow)`. Это верно?

Прокомментированное новое выражение в коде ниже не компилируется.

#include <iostream> 

int main() 
{ 
    #ifdef _DEBUG 
    int* p = new (_NORMAL_BLOCK, __FILE__, __LINE__) int(10); 
// int* q = new (std::nothrow, _NORMAL_BLOCK, __FILE__, __LINE__) int(10); 
    #else 
    int* p = new int(10); 
    int* q = new int(10); 
    #endif 

    _CrtDumpMemoryLeaks(); 
} 

Я также хотел бы знать, где же <iostream> включает <crtdbg.h>. Я просто не мог найти его. Но, конечно, она должна быть где-то.

ответ

0

Не напрямую. Microsoft не предоставляет void* operator new(std::nothrow_t, const char* file, int line), но вы можете это сделать тривиально. Просто перейдите к метательной версии и в обработчике catchreturn NULL;.

+0

Это похоже ответ. Я понимаю, что это небольшая деталь, но знаете ли вы, случайно, что файл '' включен в ''? – Belloc

+0

я, наконец, нашел место, где '' входит в '': – Belloc

+0

я, наконец, нашел место, где '' входит в '': 'iostream> isstream> osstream> ИОС> xlocnum> streambuf> xiosbase> xlocale> stdexcept> xstring > xmemory> xutility> crtdbg'. – Belloc