2012-03-06 7 views
0

私は、新しい式new (std::nothrow)でファイルとリークが発生している行を取得しようとしています。私は新しい表現 `new(std :: nothrow)`にMSリークディテクタを使うことはできないようです。あれは正しいですか?

以下のコードのコメント付きの新しい式はコンパイルされません。

#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

直接ではありません。マイクロソフトではvoid* operator new(std::nothrow_t, const char* file, int line)を提供していませんが、自信を持って自分で行うことができます。投げているバージョンとcatchハンドラreturn NULL;に転送してください。

+0

それは答えと思われます。これは細かいことだと思いますが、 ''ファイルが ''に含まれていることは間違いありませんか? 'が' '' に含まれる場合、私はついに見つけ – Belloc

+0

: – Belloc

+0

私はついに見つけ 'が' ''に含まれる場合: 'のiostream> isstream> osstream>イオス> xlocnum>ストリームバッファ> xiosbase> xlocale> stdexcept提供> XSTRING > xmemory> xutility> crtdbg'となります。 – Belloc