stackoverflow是堆栈到达堆然后停止的时候。存在与stackoverflow相关的安全问题,而无限循环只是继续运行。
有人在接受采访时问道,我回答了stackoverflow。这是对的吗?
答案 0 :(得分:0)
我倾向于同意你的观点。 stackoverflow可能会导致你的直接shell之外的问题,其中无限循环只会占用处理器时间。
但这可能是一个没有正确答案的问题的例子。他们可能只是想看到你处理问题并给出一个经过深思熟虑的答案。
答案 1 :(得分:-2)
安全问题可能是由 SO 引起的,但它可能是由任何原因引起的。无限循环也会导致内存泄漏(不总是,但经常)。
缓冲区溢出通常不是由 SO 引起的,而是由缓冲区过载引起的(欺骗代码覆盖它自己的返回地址,在理想情况下是我们刚刚发送到缓冲区的内容)。但是:
两者都使程序不再运行。
不同之处在于,在 SO 中,您有一个堆栈跟踪,并且您当场知道原因是什么。它通常很容易修复(典型的修补程序是将大堆栈分配更改为动态堆分配,即在 C 中,您将 int x[BIG_BIG_NUMBER]
转换为 int *x = malloc(sizeof(int) * BIG_BIG_NUMBER); ...; free(x);
。
在无限循环中,您没有这些信息,而且您没有简单的方法知道程序是否处于无限循环中,或者它只是很慢。此外,最重要的是:您可以轻松调试程序的当前状态,但您没有关于导致它的先前状态的追溯信息。
基于这些原因,我认为 SO 更好。虽然这在很大程度上取决于情况。例如,由递归函数而不是由大量堆栈分配引起的 SO 可能像无限循环一样有问题。