代码改变世界

让C++程序崩溃的简便方法

2011-12-19 16:30  咆哮的马甲  阅读(2911)  评论(0编辑  收藏  举报

今天在stackoverflow上看到有人提问怎样写出最短的代码让c++的程序崩溃,摘抄部分答案分享。

链接:http://stackoverflow.com/questions/8481783/what-is-the-easiest-way-to-make-a-c-program-crash

1. abort()

abort()方法的目的在于使程序非正常退出,它生成一个SIGABRT信号,该信号将导致程序退出并返回给当前程序的运行环境一个unsuccessful termination的错误码。

被abort终结的程序将不会调用全局和静态变量的析构函数,也不会调用atexit()方法中注册的函数。

abort()方法不会返回到调用它的函数或程序。

 

2. exit (-1);

与abort类似,exit(int status)同样用于终止当前程序的运行,不同之处在于exit(int status)在程序退出之前会执行一些清理工作。

首先,在atexit()方法中注册过的函数将被调用,之后,stream与temporary files将被关闭(删除),全局变量与静态变量的析构方法将被调用,最后控制权将返回给当前程序的运行环境。

status参数将被返回给运行环境,0表示成功,非0的值都表示程序被非正常的终止。

 

3. raise (SIGABRT);

我们曾经在abort的方式中提到过SIGABRT信号,该信号用于终止当前的程序。发送信号可以使用 int raise (signal sig)方法。

常用的signal见下表,raise方法应该可以满足大多数终止程序运行的需求。


参考资料:

http://stackoverflow.com/questions/8481783/what-is-the-easiest-way-to-make-a-c-program-crash
http://www.cplusplus.com/reference/clibrary/csignal/raise/
http://www.cplusplus.com/reference/clibrary/cstdlib/exit/
http://www.cplusplus.com/reference/clibrary/cstdlib/atexit/