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

1) newmalloc 的区别及用法

区别

  • 类型安全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

相关推荐
叠层归一研究院5 小时前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
wuyk5558 小时前
2.队列:先进先出的线性数据结构
c语言·数据结构·stm32·单片机
会周易的程序员9 小时前
aiDgePLC — IEC61131-3 ST PLC 虚拟机调试与运行环境
c++·物联网·虚拟机·st·工业协议·iec61131·梯形图
wuminyu10 小时前
JVM利用io_uring优化堆外内存性能原理剖析
java·linux·c语言·jvm·c++
gumichef10 小时前
第二章:C/C++内存管理
c++·内存管理
小龙报14 小时前
【优选算法】1.搜索插入位置 2.x的平方根
java·c语言·数据结构·c++·python·算法·蓝桥杯
A_humble_scholar14 小时前
Linux(二) C++ TCP/UDP网络编程
linux·网络·c++
SNAKEpc1213816 小时前
OpenGL(十五)- 着色器语言GLSL
c语言·c++·线性代数·算法·矩阵·图形渲染·着色器
欧特克_Glodon16 小时前
OpenCV计算机视觉开发入门与实践<六>:OpenCV架构模块简介
c++·人工智能·opencv·计算机视觉
Rabitebla16 小时前
C++11 新特性详解(一):列表初始化、initializer_list 与右值引用
java·开发语言·数据结构·c++·算法·leetcode·list