You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux与Windows平台对象分配失败的适配错误码咨询

内存分配失败的平台错误码选择

Linux 平台

  • C++ 默认行为下,new 分配内存失败会抛出 std::bad_alloc 异常,不会返回 NULL;如果使用 new(std::nothrow) 方式分配,失败时才会返回 NULL,此时对应的系统错误码是 ENOMEM(定义在 <errno.h>),语义就是内存不足。
  • 你提供的代码场景属于内存分配失败,对应错误类型是 out_of_memory,匹配 ENOMEM 错误码。

Windows 平台

  • Windows 下默认 new 分配失败同样会抛出异常,若用 new(std::nothrow) 让分配失败返回 NULL,对应的系统错误码是 ERROR_OUTOFMEMORY(定义在 <winerror.h>,值为 0x0000000E)。
  • 这个场景里应该选 out_of_memory 类型错误码,invalid_handle(句柄无效,和内存分配无关)、invalid_operation(操作无效,不匹配内存耗尽场景)都不适用。

代码补充说明

你的代码里默认 new 分配失败不会返回 NULL,if (b == NULL) 这个判断在标准 C++ 下永远不会触发。如果要让 new 失败时返回 NULL,需要改用 std::nothrow 版本:

B* b = new(std::nothrow) B();

内容的提问来源于stack exchange,提问作者suprit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:41:55