Menu
CoddyTech

使用 'delete' 释放内存

本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 7 课,共 56 课。

使用 new 动态分配内存时,使用完后这些内存不会自动消失。与会自动清理的普通变量不同,动态分配的内存会一直被占用,直到你显式释放它。这时,delete 关键字就非常重要。

delete 关键字会释放之前通过 new 分配的内存。使用 delete 时,你是在告诉系统,你已经用完这块内存,它可以被重新用于其他用途:

int* ptr = new int(42);  // 分配内存
// 使用这块内存……
delete ptr;              // 释放内存

动态内存管理的基本规则很简单:每个 new 都必须有对应的 delete。如果你忘记释放动态分配的内存,就会造成内存泄漏:程序会继续占用不再使用的内存,最终可能导致系统可用内存耗尽。

对指针调用 delete 后,该指针会变得无效,不应再使用。删除后将指针设为 nullptr 是个好习惯,可以避免意外使用它。

challenge icon

挑战

简单

创建一个程序,通过使用 new 分配内存、使用内存,然后使用 delete 正确释放内存,来演示动态内存的完整生命周期。

将提供以下输入:

  • 一个要存储在动态分配内存中的整数值
  • 第二个用于更新已存储值的整数值

你的程序应执行以下操作:

  1. 使用 new 为一个整数动态分配内存,并将指针存储在名为 dynamicPtr 的变量中
  2. 使用解引用运算符,将第一个输入值赋给动态分配的内存
  3. 打印存储在动态分配内存中的初始值
  4. 将动态分配内存中的值更新为第二个输入值
  5. 打印更新后的值
  6. 使用 delete 释放动态分配的内存
  7. 删除后将指针设置为 nullptr
  8. 打印一条确认内存已释放的消息

使用以下确切的输出格式:

Initial value: [first value]
Updated value: [second value]
Memory freed successfully

亲手试试

#include <iostream>
using namespace std;

int main() {
    // 读取输入值
    int firstValue, secondValue;
    cin >> firstValue;
    cin >> secondValue;
    
    // TODO:在下面编写你的代码
    // 1. 使用 new 分配内存,并将地址存入 dynamicPtr
    // 2. 将 firstValue 赋给分配的内存
    // 3. 输出初始值
    // 4. 用 secondValue 更新值
    // 5. 输出更新后的值
    // 6. 释放内存,并将指针设为 nullptr
    // 7. 输出确认消息
    
    return 0;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C++ 在线编译器