2011-04-24 81 views
2

你能想到一个情况,你的程序会在没有达到你在main()开头设置的断点的情况下崩溃吗?C++ main()脑筋急转弯

我的回答是静态变量的初始化过程中,但不知道...

+1

在调用'main()'之前发生了一些事情,并不是所有代码都在你的代码中...... – 2011-04-24 14:12:17

+0

C++是否有静态{}块?如果有的话,可能会出现疯狂的魔法。 – Doug 2011-04-24 14:13:27

+0

@Ignacio,照顾几个这样的事情? – stonebird 2011-04-24 14:32:41

回答

2

一个很简单的例子

struct abc 
{ 
    abc() 
    { 
     int* p = 0; 
     *p = 42; // Drat! 
    } 
}; 

abc obj; 
int main(){} 
+0

有保证吗? – Nawaz 2011-04-24 14:17:06

+0

@Nawaz:在大多数实现中是的。技术上它的UB。 – 2011-04-24 14:18:11

+0

@Prasoon:但不能保证! – Nawaz 2011-04-24 14:18:48

2

我的回答给了100%的保证,这将main()之前崩溃。

#include <exception> 

struct A 
{ 
    A() 
    { 
     std::terminate(); //from <exception> 
     //you can also call std::abort() from <cstdlib> 
    } 
}; 
A a; 

int main(){} 

演示:http://www.ideone.com/JIhcz


另一种解决方案:

struct A 
{ 
    A() 
    { 
     throw "none"; 
    } 
}; 
A a; 

int main(){} 

演示:http://www.ideone.com/daaMe

+1

这个ideone网站真酷! – stonebird 2011-04-24 14:21:33

3

上面的例子是真实的,但在我的经验,这通常是由于一些问题加载DLL ...