MST
星途 面试题库

面试题:C++中栈内存和堆内存变量的生命周期特点

请简述C++中栈内存区域变量和堆内存区域变量的生命周期各有什么特点,并举例说明如何在代码中体现。
34.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

栈内存区域变量生命周期特点

  • 栈变量由系统自动分配和释放。当进入变量所在的代码块时,系统自动为栈变量分配内存;当代码块结束时,系统自动回收这些变量占用的栈内存。
  • 栈变量的生命周期与定义它的代码块的生命周期紧密相关,具有局部性,其作用域仅限于定义它的代码块内。

堆内存区域变量生命周期特点

  • 堆变量由程序员手动分配和释放。使用new关键字分配内存,使用delete关键字释放内存。
  • 堆变量的生命周期从new分配内存开始,直到delete释放内存结束。如果不手动释放,可能会导致内存泄漏。

代码示例

#include <iostream>

void stackVariableExample() {
    // 定义栈变量
    int stackVar = 10;
    std::cout << "栈变量 stackVar 的值: " << stackVar << std::endl;
}  // 代码块结束,stackVar 自动释放

void heapVariableExample() {
    // 定义堆变量
    int* heapVar = new int(20);
    std::cout << "堆变量 *heapVar 的值: " << *heapVar << std::endl;
    // 手动释放堆变量
    delete heapVar;
}

int main() {
    stackVariableExample();
    heapVariableExample();
    return 0;
}

在上述代码中,stackVariableExample函数内的stackVar是栈变量,在函数结束时自动释放。heapVariableExample函数内的heapVar是堆变量,需要手动使用delete释放,否则会造成内存泄漏。