我试图检查有多少递归导致堆栈溢出。 但是为什么下面的代码输出没有呢?
#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;
}
答案 0 :(得分:4)
因为在大多数实现中,溢出堆栈会导致操作系统彻底终止进程,而不是抛出异常的进程。
C++
标准未指定堆栈溢出导致的预期行为。堆栈溢出的结果未指定。在这种情况下,特定的C++
实现肯定会抛出异常,但不需要这样做。