2011-04-24 3 views
2

Pouvez-vous penser à une situation où votre programme se bloquerait sans atteindre le point d'arrêt que vous avez défini au début de main()?C++ main() brain teaser

Ma réponse est lors de l'initialisation des variables statiques, mais pas sûr ...

+1

Plusieurs choses se produisent avant que 'main()' soit appelé, pas toutes dans votre code ... –

+0

Est-ce que C++ a des blocs {} statiques? La magie écrasante pourrait être possible si c'est le cas. – Doug

+0

@Ignacio, soin de mentionner quelques-unes de ces choses? – stonebird

Répondre

2

Un exemple très simple

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

abc obj; 
int main(){} 
+0

Est-ce garanti? – Nawaz

+0

@Nawaz: Sur la plupart des implémentations oui. Techniquement, c'est UB. –

+0

@Prasoon: Mais pas garanti! – Nawaz

2

Ma réponse donne 100% de garantie que cela va tomber en panne avant main().

#include <exception> 

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

int main(){} 

Démo: http://www.ideone.com/JIhcz


Une autre solution:

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

int main(){} 

Démo: http://www.ideone.com/daaMe

+1

ce site web ideone est vraiment cool! – stonebird

3

Les exemples ci-dessus sont vraies, mais dans mon expérience, il est généralement dû à un problème chargement d'une DLL ...