【发布时间】:2017-05-28 19:48:39
【问题描述】:
在 Java 中会有一个堆栈跟踪,上面写着StackOverflowError,整个系统不会崩溃,只有程序会崩溃。
在 C 语言中,我知道数组索引越界会产生分段错误。 C中的堆栈溢出是否相同,并且还会出现分段错误,即类似问题的相同错误类型?
我没有在 C 中测试有意识的无限递归来看看会发生什么,因为我不知道后果。
或者有时情况会更糟,C 中的堆栈溢出可能会导致操作系统故障并迫使您重启电源才能返回?或者更糟的是,造成不可逆转的硬件损坏?堆栈溢出错误会有多糟糕的影响?
似乎很明显,Java 中的保护比 C 中更好。C 中的保护是否比汇编/机器代码更好,或者 C 中的保护实际上与汇编中的保护相同(缺少)?
【问题讨论】:
-
是什么让您认为没有保护措施?您是否遇到过分段错误?你看到了什么?
-
不,操作系统应该不会发生任何不好的事情。现代处理器和操作系统使程序不可能意外影响操作系统或其他程序。
-
在典型的现代操作系统(Linux、Windows、其他 Unix 等)上,C 程序(或任何其他任何语言的程序)通常不会导致操作系统故障。错误的过程只会崩溃,仅此而已。
-
在 C 中我知道数组索引越界会产生分段错误:这不是真的,C 中的索引越界会导致 未定义的行为(谷歌该术语)。虽然它可能导致段错误。
-
C 不知道堆栈,因此它不知道堆栈溢出时会发生什么。
标签: java c error-handling stack-overflow