C/C++基础知识复习(15)

1) new 和 malloc 的区别及用法

区别:

  • 类型安全 :new 是 C++ 运算符,它会调用对象的构造函数并返回正确类型的指针;malloc 是 C 的函数,它返回的是 void*,需要显式转换为目标类型。
  • 初始化 :new 在分配内存时会初始化对象(对于基本数据类型,会调用默认构造函数),而 malloc 只分配内存,初始值不确定。
  • 析构 :使用 new 分配的内存需要用 delete 释放,而 malloc 分配的内存则用 free 释放。
  • 异常处理 :new 在内存不足时会抛出 std::bad_alloc 异常,而 malloc 则返回 NULL。

用法:

  • new:

    cpp 复制代码
    int* p = new int; 
    // 分配一个int 
    *p = 42; 
    // 初始化 
    delete p; 
    // 释放内存 
    MyClass* obj = new MyClass(); 
    // 创建对象 
    delete obj; // 释放对象
  • malloc:

    cpp 复制代码
    int* p = (int*)malloc(sizeof(int)); 
    // 分配一个int 
    if (p == NULL) { 
    // 处理分配失败 
    } 
    *p = 42; 
    // 初始化 
    free(p); 
    // 释放内存

2) malloc 分配失败会导致什么问题

malloc 在内存分配失败时会返回 NULL。如果程序未检查这个返回值并尝试使用这些无效指针,可能会导致许多问题,包括:

  • 崩溃或异常:访问空指针通常会导致程序崩溃。
  • 未定义行为:操作 NULL 指针会引发未定义行为,程序可能表现出不可预期的结果。
  • 资源泄漏 :如果没有检测到 malloc 返回 NULL 而继续执行程序,可能会导致资源管理不当,从而造成内存泄漏。

因此,在使用 malloc 时,总是应在使用指针之前检查其是否为 NULL。

相关推荐
夜不会漫长26 分钟前
C++:内存管理
java·开发语言·c++
彦28 分钟前
C和C++笔记
c语言·c++·笔记
米糕闯编程1 小时前
鱼香ros2(十二)C++话题订阅与发布
开发语言·c++·ros2·话题
Code_Solitude1 小时前
反码,补码,原码
c语言
FLJwu2 小时前
运动相机按键与连接器硬件选型实战02:USB‑C接口选型|防水失效、虚接断连、腐蚀烧口量产大坑
c语言·开发语言·经验分享·数码相机·相机·运动相机·oem 量产
汉克老师2 小时前
GESP2026年9月认证C++八级( 第三部分编程题(2、末班车))精讲
c++·gesp·小学生·学c++编程
傲世仙尊3 小时前
C++起步-命名空间解决命名冲突与cin-cout缺省参数
开发语言·c++
Zw-awa3 小时前
陀螺小车传奇之00011000
c语言·stm32
(Charon)3 小时前
【C++面试】四种cast转换:static_cast、dynamic_cast、const_cast与reinterpret_cast
开发语言·c++·面试
万年咸鱼4 小时前
C语言内功心法篇——变量与数据类型
c语言·jvm·算法