您当前的位置:首页 > 计算机 > 编程开发 > VC/VC++

用C语言写一个内存溢出的例子

时间:12-26来源:作者:点击数:

操作系统允许程序自己分配内存,并自由使用,使用完了还可以再释放掉,将内存归还给计算机。

所谓分配内存,就是程序向计算机申请一块内存空间,然后自己使用;所谓释放内存,就是程序告诉计算机不再使用之前的内存空间了,需要归还给计算机,让其它程序使用。

如果一个程序不停地分配内存,而不释放内存,那么拥有的内存就会越来越多,计算机内存就会被消耗殆尽,其它程序能够使用的内存越来越少,整台计算机就会都变得缓慢,甚至卡死。

下面我们就用 while 循环来写一个内存泄漏的例子:

#include <stdlib.h>
#include <stdio.h>
int main(){
    while(1){  //死循环
        malloc(1024);  //分配1024个字节的内存
    }
    return 0;
}

while 循环的条件是 1,始终成立,循环会一直进行下去,永无休止,所以是一个“死循环”。

每次循环,程序都会向计算机申请 1024 个字节(1KB)的内存,并且不会释放;循环到第 1024 次时,程序就占用了 1024*1024 个字节(1MB)的内存;循环到 1024*1024 次时,程序就占用了 1024*1024*1024 个字节(1GB)的内存。

不要害怕,亲自跑一下试试,打开 Windows 下的任务管理器,可以看到内存的使用率会飙升,稍等片刻后程序会被终止。Windows 的内存管理机制发现我们的程序占用内存太多,会让它崩溃,防止系统卡死(其它的操作系统也有相应的措施)。

内存泄漏是C语言程序很常见的一个问题,当程序规模比较大时,有时候找到这个 Bug 就变得很困难,所以大家一定要养成良好的内存使用习惯,及时释放不再使用的内存。本节仅仅是一个简单的演示,我们还会在《C语言和内存》专题中深入讲解。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门