MST

星途 面试题库

面试题:C++中delete与delete []在释放数组时的区别

假设有一个`int`类型的动态数组`int* arr = new int[10];`,请分别说明使用`delete arr;`和`delete [] arr;`会产生什么不同的结果,以及原因是什么。
28.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. delete arr;的结果及原因
    • 结果:行为未定义,可能导致内存泄漏和程序崩溃。
    • 原因delete arr;用于释放单个对象的内存,而这里arr指向的是一个动态分配的数组。使用delete arr;只释放了arr指向的第一个元素的内存,数组中其余元素的内存未被释放,从而导致内存泄漏。同时,这种错误的释放方式可能破坏堆内存管理结构,进而导致程序崩溃。
  2. delete [] arr;的结果及原因
    • 结果:正确释放整个动态分配的数组的内存。
    • 原因delete [] arr;专门用于释放通过new []分配的数组内存。它会按照数组分配时记录的信息,依次释放数组中每个元素的内存,从而正确地回收整个数组占用的堆内存。