我试图使一个Python程序接口与不同的崩溃进程(这是我的手)。不幸的是,我正在使用的程序甚至不会可靠地崩溃!所以我想做一个快速的c++程序,它会故意崩溃,但我不知道最好和最短的方法来做到这一点,有人知道在我的
int main() {
crashyCodeGoesHere();
}
使我的c++程序可靠地崩溃
我试图使一个Python程序接口与不同的崩溃进程(这是我的手)。不幸的是,我正在使用的程序甚至不会可靠地崩溃!所以我想做一个快速的c++程序,它会故意崩溃,但我不知道最好和最短的方法来做到这一点,有人知道在我的
int main() {
crashyCodeGoesHere();
}
使我的c++程序可靠地崩溃
当前回答
虽然这个问题已经有了公认的答案……
void main(){
throw 1;
}
还是……无效main(){throw 1;}
其他回答
一种时髦的方法是使用纯虚函数调用:
class Base;
void func(Base*);
class Base
{
public:
virtual void f() = 0;
Base()
{
func(this);
}
};
class Derived : Base
{
virtual void f()
{
}
};
void func(Base* p)
{
p->f();
}
int main()
{
Derived d;
}
用gcc编译,输出:
纯虚方法调用 在没有活动异常时调用Terminate 中止(核心转储)
这会在我的Linux系统上崩溃,因为字符串文字存储在只读内存中:
0[""]--;
顺便说一下,g++拒绝编译这个。编译器变得越来越聪明:)
int i = 1 / 0;
您的编译器可能会警告您这一点,但在GCC 4.4.3下它编译得很好 这可能会导致SIGFPE(浮点异常),这在实际应用程序中可能不像SIGSEGV(内存分段违反)那样可能导致其他答案,但它仍然是崩溃。在我看来,这样可读性更强。
另一种方法,如果我们要欺骗和使用signal.h,是:
#include <signal.h>
int main() {
raise(SIGKILL);
}
这保证杀死子进程,与SIGSEGV形成对比。
char*freeThis;
free(freeThis);
释放未初始化的指针是未定义的行为。在许多平台/编译器上,freeThis将有一个随机值(无论之前在内存位置上是什么)。释放它将要求系统释放该地址的内存,这通常会导致分割错误并使程序崩溃。
abort()函数可能是最好的选择。它是C标准库的一部分,被定义为“导致异常程序终止”(例如,致命错误或崩溃)。