MST
星途 面试题库

面试题:C++中指针函数错误处理机制的常见方式

在C++中,当编写一个指针函数时,可能会遇到各种错误,例如内存分配失败。请简述在指针函数中处理内存分配失败这类错误的常见机制,并给出一段简单代码示例。
32.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

常见机制

  1. 检查返回值:在使用new分配内存时,new会在分配失败时抛出std::bad_alloc异常。也可以使用new (std::nothrow)形式,这种情况下分配失败返回nullptr,通过检查返回值判断是否分配成功。
  2. 异常处理:使用try - catch块捕获std::bad_alloc异常,在catch块中进行错误处理,比如输出错误信息、释放已分配的资源等。

代码示例

#include <iostream>
#include <cstdlib>

// 使用new (std::nothrow) 检查返回值方式
int* createIntArray(size_t size) {
    int* arr = new (std::nothrow) int[size];
    if (!arr) {
        std::cerr << "Memory allocation failed!" << std::endl;
        return nullptr;
    }
    return arr;
}

// 使用异常处理方式
int* createIntArrayWithException(size_t size) {
    try {
        int* arr = new int[size];
        return arr;
    } catch (const std::bad_alloc& e) {
        std::cerr << "Memory allocation failed: " << e.what() << std::endl;
        return nullptr;
    }
}

int main() {
    int* arr1 = createIntArray(1000000000); // 可能导致内存分配失败
    if (arr1) {
        // 使用数组
        delete[] arr1;
    }

    int* arr2 = createIntArrayWithException(1000000000);
    if (arr2) {
        // 使用数组
        delete[] arr2;
    }

    return 0;
}