2016-05-08 6 views
1

Ich habe versucht zu überprüfen, wie viele Rekursionen Stapelüberlauf verursacht. Aber warum gibt der folgende Code nichts aus?C++: Ausnahme von Stack-Überlauf erhalten?

#include <iostream> 
#include <exception> 
int counter = 0; 
void endlessloop() try { 
    ++counter; 
    endlessloop(); 
} catch (std::exception &e) { 
    std::cout << "Call stack overflew. Counter: " << counter << std::endl << 
    "Exception: " << e.what() << std::endl; 
} 
int main() { 
    endlessloop(); 
    return 0; 
} 

Antwort

4

Da bei den meisten Implementierungen, die Stapel Ergebnisse im Betriebssystem überquell geradezu den Prozess zu töten, statt des Prozesses eine Ausnahme zu werfen. Der C++-Standard gibt nicht das erwartete Verhalten an, das von einem Stapelüberlauf resultiert. Die Ergebnisse eines Stack-Überlaufs sind nicht spezifiziert. Eine bestimmte C++ Implementierung kann in dieser Situation sicherlich eine Ausnahme auslösen, aber dazu ist es nicht erforderlich.