首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运算符new with nothrow option仍引发异常

运算符new with nothrow option仍引发异常
EN

Stack Overflow用户
提问于 2011-09-26 20:35:41
回答 3查看 2.6K关注 0票数 6

有这样的代码:

代码语言:javascript
复制
#include <iostream>

int main(){
    for(;;){
        int* ptr = new (std::nothrow) int;
        if(ptr == 0){
            std::cout << 0 << std::endl;
            break;
        }
    }
    std::cin.get();
    return 0;
}

但是,这个程序仍然会抛出std::bac_alloc异常,尽管new是用std::nothrow参数调用的。此程序是在Visual C++ 2010中编译的。为什么抛出异常?

编辑:

从mingw在Windows上使用g++,一切工作正常。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-26 21:41:20

我刚从VC2010测试了你的样本。抛出的不是什么新的东西,而是__security_check_cookie

票数 1
EN

Stack Overflow用户

发布于 2011-09-26 20:57:13

必须将0格式化为"0"。这将占用几个字节;我打赌这就是原因。在std::bad_alloc::bad_alloc上设置一个断点,你就可以确定了。

票数 7
EN

Stack Overflow用户

发布于 2011-09-26 20:49:23

This解释了为什么它仍然在抛出,以及如何让它不抛出。看起来nothrow就是被忽略了。

如果您仍然想要C运行时库的非抛出版本的

,请将您的程序与nothrownew.obj链接起来。但是,当您与nothrownew.obj链接时,标准C++库中的新功能将不再起作用。

我找到了一篇关于这方面的相当深入的文章,但它有点过时(VC6),但也许这个问题仍然存在。顺便说一句,VC忽略了函数的所有throw()规范。

When Operator new(std::nothrow) Throws an Exception Anyway

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

https://stackoverflow.com/questions/7555138

复制
相关文章

相似问题

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