似乎我不能将 MS 检漏仪用于新表达式“new (std::nothrow)”。那是对的吗?

Posted

技术标签:

【中文标题】似乎我不能将 MS 检漏仪用于新表达式“new (std::nothrow)”。那是对的吗?【英文标题】:It seems like I cannot use MS leak detector for the new expression `new (std::nothrow)`. Is that correct? 【发布时间】:2012-03-06 13:16:14 【问题描述】:

我正在尝试使用新表达式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();

我也很想知道&lt;iostream&gt; 在哪里包含&lt;crtdbg.h&gt;。我只是找不到它。但当然,它必须在某个地方。

【问题讨论】:

【参考方案1】:

不直接。 Microsoft 不提供void* operator new(std::nothrow_t, const char* file, int line),但您可以自己轻松地这样做。只需转发到 throwing 版本和 catch 处理程序 return NULL;

【讨论】:

这似乎是答案。我知道这是一个小细节,但是您是否知道&lt;crtdbg.h&gt; 文件包含在&lt;iostream&gt; 中的哪个位置? 我终于找到了&lt;crtdbg.h&gt;包含在&lt;iostream&gt;中的位置: 我终于找到了&lt;crtdbg.h&gt;&lt;iostream&gt;中的位置:iostream &gt; isstream &gt; osstream &gt; ios &gt; xlocnum &gt; streambuf &gt; xiosbase &gt; xlocale &gt; stdexcept &gt; xstring &gt; xmemory &gt; xutility &gt; crtdbg

以上是关于似乎我不能将 MS 检漏仪用于新表达式“new (std::nothrow)”。那是对的吗?的主要内容,如果未能解决你的问题,请参考以下文章

TS2351:不能将“new”与类型缺少调用或构造签名的表达式一起使用。角度 8

错误“不能将 'new' 与类型缺少调用或构造签名的表达式一起使用。”导入 Esri 类型时

Modbus转Profinet网关连接皖仪氦质谱检漏仪SFJ-16M通信配置案例

Modbus转Profinet网关连接皖仪氦质谱检漏仪SFJ-16M通信配置案例

VS2010分析器/泄漏检测

在 MS ACCESS 中查找完成的字段百分比