2016-06-30 13 views
-4

Ich möchte fragen, wie man eine Ausnahme, die irgendwo in der Funktion std:sort geworfen wird. Ich habe diesen Code versuchteine Ausnahme in Std fangen: sort

try 
{ 
    sort([arguments]) 
} 
catch(...) 
{ 
    cout << "error"; 
} 

Allerdings funktioniert es nicht. Gibt es eine Möglichkeit, wie man das schreibt?

+4

Wie funktioniert es nicht? Was geschieht? Kannst du ein [mcve] machen? – NathanOliver

+1

nur aus Neugier, was ist die Ausnahme? –

+0

Wenn Sie den Typ der Ausnahmebedingung sehen, wenn er in Ihrem Debugger ausgelöst wird, versuchen Sie, ihn unter dem Namen –

Antwort

4

Pro Kommentar, re: "Zugriffsverletzung" - das ist eine OS-berichtete Ausnahme, keine C++ Ausnahme. Dies ist normalerweise das Ergebnis der Übergabe eines Vergleichsobjekts, das keine strikt schwache Ordnung erzeugt. Da Sie sich nicht die Mühe gemacht haben, die "Argumente" zu zeigen, ist es nicht möglich, dies weiter zu diagnostizieren.

0

The reasons that sort will throw sind:

  • Das Element Vergleiche werfen
  • Das Element Swaps (oder bewegt)
  • Die Operationen werfen auf Iteratoren

So verursachen sort werfen ohne ungültige Argumente zu werfen (was zu undefiniertem b Verhalten) müssen Sie entweder einen benutzerdefinierten Iterator oder einen benutzerdefinierten Vergleicher verwenden.

Da es viel einfacher ist, eine conmarator zu schreiben, werde ich Ihnen auf diese Weise zeigen:

try { 
    sort(begin(foo), end(foo), [](auto& lhs, auto& rhs) { 
     throw exception(); 
     return lhs < rhs; 
    }); 
} catch(...) { 
    cout << "error\n"; 
}