代码如下,先上为敬:
其实这个小程序严格说不是是搞笑,而是整人小程序,因为如果正常编译运行的后果是让你的电脑死机。核心的原理是利用C语言malloc函数不断分配内存造成内存耗尽。
有人说,这里面哪有malloc函数?这也正是这段代码的关键,只要你能理解这一点,整个问题就迎刃而解了。我们注意到其中有大量的define,它的作用简单点说一般就是替换。代码中还有一个符号高频出现“##”,平时我们用的比较少,它的作用叫拼接。
因此代码第四和第五行的实际意思如下:
上面综合起来就是将所有的puts替换为m##a##l##l##o##c,说白了是将所有的puts替换为malloc,而第六行和第七行的原理也是这样,结果就是将所有的gets替换为while,p用1024替换,false替换为true。所以main函数中代码应该是这样:
显而易见,while死循环,不断分配内存,很快就会内存耗尽。数值1024可修改,想加快内存耗尽速度就改大。
关于true的问题,代码第九行的意思是将false替换为true,因为它俩本身就代表布尔值判断,所以可能少部分编译器会报错,当时我这么写是为了增加迷惑指数,如果报错可以直接删除第九行,直接写上1,构成死循环。
到这里都明白了吧,其实很简单的,核心原理就是替换,这里替换的是malloc函数,还可以换成别的,比如system函数,再借用shutdown,像什么关机、重启都可以实现,感兴趣的自己试一下吧!
如果你想要获取更多C语言、C++、Window以及QT的知识!笔者推荐一个C语言/C++编程零基础入门学习交流俱乐部(群)点击进入,有编程学习文件(源码,项目实战教学视频以及给小白的零基础教程,),欢迎初学者和正在进阶中的小伙伴们!