c语言 malloc_我保证,学完这段简单的C语言代码,你会有想打人!

87bc7cebe2fbdaeddda5462f670d6809.png

代码如下,先上为敬:

0ff94229dbedb20cc60c90398e127b56.png

其实这个小程序严格说不是是搞笑,而是整人小程序,因为如果正常编译运行的后果是让你的电脑死机。核心的原理是利用C语言malloc函数不断分配内存造成内存耗尽。

有人说,这里面哪有malloc函数?这也正是这段代码的关键,只要你能理解这一点,整个问题就迎刃而解了。我们注意到其中有大量的define,它的作用简单点说一般就是替换。代码中还有一个符号高频出现“##”,平时我们用的比较少,它的作用叫拼接

因此代码第四和第五行的实际意思如下:

a89af609aeac7c7df34b360e77a307d6.png

上面综合起来就是将所有的puts替换为m##a##l##l##o##c,说白了是将所有的puts替换为malloc,而第六行和第七行的原理也是这样,结果就是将所有的gets替换为while,p用1024替换,false替换为true。所以main函数中代码应该是这样:

8046f2c9e95a14a3314989f17e2e5ec0.png

显而易见,while死循环,不断分配内存,很快就会内存耗尽。数值1024可修改,想加快内存耗尽速度就改大。

关于true的问题,代码第九行的意思是将false替换为true,因为它俩本身就代表布尔值判断,所以可能少部分编译器会报错,当时我这么写是为了增加迷惑指数,如果报错可以直接删除第九行,直接写上1,构成死循环。

到这里都明白了吧,其实很简单的,核心原理就是替换,这里替换的是malloc函数,还可以换成别的,比如system函数,再借用shutdown,像什么关机、重启都可以实现,感兴趣的自己试一下吧!

如果你想要获取更多C语言、C++、Window以及QT的知识!笔者推荐一个C语言/C++编程零基础入门学习交流俱乐部(群)点击进入,有编程学习文件(源码,项目实战教学视频以及给小白的零基础教程,),欢迎初学者和正在进阶中的小伙伴们!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值