首页 > 其他分享 >关于new、delete函数的错误处理(std::nothrow)

关于new、delete函数的错误处理(std::nothrow)

时间:2024-07-30 23:50:00浏览次数:9  
标签:std 函数 int new 错误处理 nothrow delete

new、delete函数源码注释如下:
image

无参数

无参数的new、delete函数,如果调用失败,会抛出bad_alloc异常,需要使用try{}catch(){}语句捕获异常从而进行异常处理。

#include <iostream>

int main()
{
    try {
        while (1)
        {
            int *p = new int[100000000ul];
        }
    } catch (std::bad_alloc& e) {
        std::cout << e.what() << std::endl;
    }

    return 0;
}

带参数

带参数的new、delete函数可以传入std::nothrow参数,那么new、delete的行为和C语言的malloc、free函数行为一致,分配空间失败时会返回空指针,可通过指针判空进行错误处理。

#include <iostream>

int main()
{

    while (1)
    {
        int *p = new(std::nothrow) int[100000000ul];
        if (!p)
        {
            std::cout << "分配空间失败!" << std::endl;
            break;
        }
    }


    return 0;
}

标签:std,函数,int,new,错误处理,nothrow,delete
From: https://www.cnblogs.com/Joe-zhu/p/18333607

相关文章

  • unity报错CommandWithNoStdoutInvokationFailure: Unable to start ADB server.
    这个错误提示表明Unity无法启动ADB(AndroidDebugBridge)服务器,这通常是因为AndroidSDK没有安装或者配置不正确。以下是一些解决这个问题的步骤:确认AndroidSDK的安装:确保你已经安装了AndroidSDK。可以通过AndroidStudio来安装SDK,或者从Android开发者网站下载。配置U......
  • 为什么 Windows 上的 `os.execl` 会干扰 `stdin`?
    我的最小示例是null.py:importos,sysos.execl(sys.executable,sys.executable)我本以为pythonnull.py与运行python几乎相同,Ubuntu22.04上就是这种情况。然而,在Windows11上,它似乎会严重扰乱标准输入;例如,如果我按下一个键,它可能会也可能不会出......
  • new和Override分别有什么作用(什么情况下用new或者Override)
    override用途:override用于在派生类中重写基类中的虚方法或抽象方法。重写的方法必须与基类中的方法具有相同的签名(方法名、参数列表和返回类型)。基类中的方法必须声明为virtual、abstract或已经由另一个override方法重写。多态性:override支持多态性,允许在运行......
  • 编译期new,constexpr虚函数,C++
    标准:C++20环境:VSCodeg++13.2C++20新特性,constexpr虚函数,编译期new表达式,可以在编译期实现多态。示例代码://这段仅仅示例编译期new。structA{constexprA(){p=newint(6);}constexpr~A(){deletep;}constexprautoget()co......
  • std::optional
    mutable在C++中,mutable关键字的主要作用是允许类的成员变量在常量成员函数中被修改。常量成员函数是用const关键字修饰的成员函数,通常不允许修改类的成员变量。然而,有时我们希望在这些常量成员函数中修改某些特定的成员变量,比如缓存、调试信息等。为了实现这一需求,可以使用mu......
  • 演示 数据类型 数组名[]=new 数据类型[大小],循环输入5个成绩,保存到double数组,并输出
    importjava.util.Scanner;publicclassexercise13{//编写一个main方法publicstaticvoidmain(String[]args){//演示数据类型数组名[]=new数据类型[大小]//循环输入5个成绩,保存到double数组,并输出//步骤//1.创建一个dou......
  • CF568C New Language 题解
    Description将\(\texttt{a}\sim\texttt{a}+l-1\)这\(l\)个字符分成\(\texttt{V,C}\)两个集合。你需要构造一个长度为\(n\)且满足\(m\)个限制且不小于另一个长度为\(n\)的字符串\(s\)的最小字符串。每一个限制为若字符串的第\(p_1\)个位置上的字符\(\in......
  • std的map或者set中,比较浮点类型二维三维数据
    在map和set中,如果比较对象是二维或者三维数据,需要把二维三维数据的浮点数转换为比较精度。如果比较精度是0.001,那么数据的精度也必须是0.001,不然会出现如下情况:比较函数 structPoint001Comp{booloperator()(constPoint*l,constPoint*r)const{i......
  • C++ printf/std::cout如何重定向到日志文件中
    在C++中,可以使用标准库中的头文件提供的ofstream类来打开文件,并使用std::freopen函数将stdout重定向到该文件。以下是一个示例代码,展示如何将printf输出重定向到日志文件中:#include<cstdio>#include<fstream>intmain(){std::ofstreamlogFile("log.txt",std::ios:......
  • welcome to my new start
    thisisanewstart.I'mehua'swife.QwQ放个缺省源:#include<bits/stdc++.h>typedeflonglongLL;typedefunsignedlonglongULL;#definerep(i,a,b)for(inti=(a);i<=(b);i++)#defineper(i,a,b)for(inti=(a);i>=(b);i--......