#include #include <csignal> #include <cstdlib> void onError(int) { // Prevent infinite recursion if onError() causes another segfault std::signal(SIGSEGV, SIG_DFL); std::cout << "Segfault spotted !" << std::endl; std::abort(); } int main () { std::signal(SIGSEGV, onError); int *p = 0; *p = 0; // Segfault return 0; }
#include <cstdlib> #include using namespace std; class A { public: virtual void methode1() = 0; }; class B: public A { public: void methode1() { if (this == NULL) { cout << "INSTANCE INVALIDE" << endl; throw 0; } else { cout << "INSTANCE VALIDE" << endl; } cout << "METHODE 1" << endl; } void methode2() { if (this == NULL) { cout << "INSTANCE INVALIDE" << endl; throw 0; } else { cout << "INSTANCE VALIDE" << endl; } cout << "METHODE 2" << endl; } }; inline B& invalide() { return ( *( (B*)NULL ) ); } int main(int argc, char *argv[]) { B b; cout << "\n-- INSTANCE VALIDE --" << endl; b.methode2(); b.methode1(); cout << "\n-- INSTANCE INVALIDE --" << endl; try { invalide().methode2(); } catch(...) { cout << "EXCEPTION METHODE 2" << endl; } try { invalide().methode1(); // Plantage ici } catch(...) { cout << "EXCEPTION METHODE 1" << endl; } system("PAUSE"); return EXIT_SUCCESS; }
-- INSTANCE VALIDE -- INSTANCE VALIDE METHODE 2 INSTANCE VALIDE METHODE 1 -- INSTANCE INVALIDE -- INSTANCE INVALIDE EXCEPTION METHODE 2
#include <cassert> assert(this);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionassert n'est qu'une macro qui affiche un message d'erreur insuffisant au niveau compréhension pour un utilisateur lambda.