Menu
CoddyTech

内存泄漏

Coddy C++ 指针 课程的第 12 课,共 14 课。

在上一课中,我们使用了 delete 关键字,因为释放你分配的内存非常重要。现在,我们会更详细地了解它。

当程序从堆中分配内存,但在不再需要这块内存后没有释放它时,就会发生内存泄漏。

本质上,运行程序时,我们会分配所需的内存,之后却忘了它,导致这块内存始终没有被释放或删除。看下面的示例:

int *p, *q; // 声明
p = new int; // 分配内存
q = new int; // 分配内存

*p = 10; // 赋值
*q = 20; // 赋值

cout << *p << " " << *q << endl;
q = p; // q 和 p 指向同一位置
// q 最初指向的位置丢失了
cout << *p << " " << *q << endl;

delete p;
delete q;
Output:
10 20
10 10

首先,我们声明指针,为每个指针分配一个整数所需的内存,然后设置这些地址上的值。正如你所见,我们可以在第一个 cout 中将它们打印出来。 


有意思的是下面这行:<i>q = p</i>。我们让指针<i>q</i>指向与<i>p</i>相同的位置。这样一来,我们最初为<i>q</i>分配的指向位置就被永久丢失了,无法再访问或删除。


正如你所见,在下一行中,我们再次打印解引用后的指针,得到相同的值,因为它们指向同一个位置。

这就是为什么重视内存泄漏并管理动态分配的数据如此重要。

quiz icon自我测试

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

quiz icon自我测试

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

quiz icon自我测试

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

challenge icon

挑战

简单

编写与上一课相同的程序,但这次要使用 delete 关键字释放所有已分配的内存。使用指针 ptrA、ptrB 和 ptrC 为三个整数动态分配内存。使用函数参数中给出的三个整数,分别将指针地址处的值设为对应的整数。第一个整数赋给 ptrA,第二个整数赋给 ptrB,最后一个整数赋给 ptrC,最后输出所有解引用后的指针值,并用空格分隔。

不要编写 <i>main()</i> 函数

亲手试试

#include <iostream>

using namespace std;

void dynamicMemory(int a, int b, int c) {
    // 在这里编写代码
    
    // 释放内存
}

// 不要编写 main() 函数

C++ 指针中的所有课

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