page contents

内存块太小导致malloc和new返回空指针,该怎么处理?

轩辕小不懂 发布于 2022-01-08 10:48
阅读 923
收藏 0
分类:C/C++开发
  • c
  • c++
  • 2841
    Nen
    Nen
    - 程序员

    对于malloc来说,需要判断其是否返回空指针,如果是则马上用return语句终止该函数或者exit终止该程序;

    对于new来说,默认抛出异常,所以可以使用try...catch...代码块的方式:

    try {
     int *ptr = new int[10000000];
    } catch(bad_alloc &memExp) {
     cerr << memExp.what() << endl;
    }
    还可以使用set_new_handler函数的方式:
    void no_more_memory() {
     cerr << "Unable to satisfy request for memory" << endl;
     abort();
    }
    int main() {
     set_new_handler(no_more_memory);
     int *ptr = new int[10000000];
    }
    在这种方式里,如果new不能满足内存分配请求,no_more_memory会被反复调用,所以new_handler函数必须完成以下事情:
    让更多内存可被使用:可以在程序一开始执行就分配一大块内存,之后当new_handler第一次被调用,就将这些内存释放还给程序使用;
    使用另一个new_handler;
    卸除new_handler:返回空指针,这样new就会抛出异常;
    直接抛出bad_alloc异常;
    调用abort或exit。

    请先 登录 后评论