MST

星途 面试题库

面试题:C++中指针在堆内存分配与释放中的应用

请描述在C++中如何使用指针进行堆内存的分配与释放。假设有一个存储整数的动态数组,编写代码实现该数组的创建、初始化、访问及释放,并阐述在这个过程中指针起到的关键作用。
19.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 堆内存分配与释放概述
    • 在C++中,使用new关键字进行堆内存分配,delete关键字进行堆内存释放。当使用new分配内存时,它会在堆上分配一块指定大小的内存,并返回一个指向该内存起始地址的指针。delete则用于释放new分配的内存,防止内存泄漏。
  2. 动态数组(存储整数)的创建、初始化、访问及释放代码示例
#include <iostream>

int main() {
    // 创建动态数组
    int* dynamicArray = new int[5];// 在堆上分配5个整数大小的内存空间,返回指向该内存起始地址的指针

    // 初始化动态数组
    for (int i = 0; i < 5; i++) {
        dynamicArray[i] = i * 2;
    }

    // 访问动态数组
    std::cout << "动态数组元素: ";
    for (int i = 0; i < 5; i++) {
        std::cout << dynamicArray[i] << " ";
    }
    std::cout << std::endl;

    // 释放动态数组内存
    delete[] dynamicArray;

    return 0;
}
  1. 指针在这个过程中的关键作用
    • 内存分配new操作符返回一个指针,这个指针指向在堆上分配的内存空间。通过这个指针,程序能够找到并操作这块新分配的内存。例如,int* dynamicArray = new int[5];中,dynamicArray指针指向了堆上分配的5个整数大小的内存区域。
    • 内存访问:指针使得程序能够通过数组下标语法(dynamicArray[i])或者指针算术运算(*(dynamicArray + i))来访问动态分配数组中的元素。这是因为指针保存了数组在内存中的起始地址,基于这个起始地址和每个元素的大小(这里是sizeof(int)),就可以计算出每个元素在内存中的位置。
    • 内存释放delete操作符接受一个指针作为参数,通过这个指针找到要释放的堆内存空间。在释放动态数组时,使用delete[]并传入指向数组起始地址的指针(如delete[] dynamicArray;),这样系统就能正确地释放整个动态数组占用的堆内存,防止内存泄漏。