我保證,學完這段簡單的C語言代碼,你會有想打人!

代碼如下,先上爲敬:

其實這個小程序嚴格說不是是搞笑,而是整人小程序,因爲如果正常編譯運行的後果是讓你的電腦死機。核心的原理是利用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++編程零基礎入門學習交流俱樂部(羣)點擊進入,有編程學習文件(源碼,項目實戰教學視頻以及給小白的零基礎教程,),歡迎初學者和正在進階中的小夥伴們!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章