首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么GCC 11.1警告“在非空期望的地方使用可能为空的‘操作符new(32)’”?

为什么GCC 11.1警告“在非空期望的地方使用可能为空的‘操作符new(32)’”?
EN

Stack Overflow用户
提问于 2021-06-22 19:14:03
回答 1查看 117关注 0票数 1

我使用的是GCC 11.1,并且我已经使用-fanalyzer选项启用了静态分析器。现在,在这行代码中:

代码语言:javascript
运行
复制
    std::pair<NodeIterator, bool> result = idNodeMap.emplace(id,
            new Node(id, point));

我得到以下警告:

代码语言:javascript
运行
复制
..\src\Mesh\Mesh.cpp: In member function 'void Ct::Geometry::Mesh::addNode(int, const gp_Pnt&)':
..\src\Mesh\Mesh.cpp:30:43: warning: use of possibly-NULL 'operator new(32)' where non-null expected [CWE-690] [-Wanalyzer-possible-null-argument]
   30 |                         new Node(id, point));
      |                                           ^
  'void Ct::Geometry::Mesh::addNode(int, const gp_Pnt&)': events 1-2
    |
    |
In file included from ..\src\Mesh\Mesh.h:12,
                 from ..\src\Mesh\Mesh.cpp:9:
..\src\Mesh\Node.h:31:9: note: argument 'this' of 'Ct::Geometry::Node::Node(int, const gp_Pnt&)' must be non-null
   31 |         Node(int id, const gp_Pnt& point);
      |         ^~~~

我没理解错警告吧,就是GCC要我检查一下new是否返回null?根据这篇文章:Will new return NULL in any case?目前的编译器和完善的编译选项从来都不是这样的。那么,这是对罕见特殊情况的警告吗?我应该禁用它吗?

或者是我忽略了什么,我的代码中存在真正的危险?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-22 20:12:20

这是GCC bug #94355

已经做了一些工作,但是这个问题仍然是开放的,并且有一个关于这个特定问题的comment

这听起来似乎还没有区分在分配失败时抛出std::bad_allocoperator new和返回nullptr的(假设)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68082513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档