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