【发布时间】:2017-12-28 16:27:06
【问题描述】:
有人能解释一下为什么这个“无休止的”循环会很快出现段错误吗? 例如,假设我们有这个函数:
#!/bin/bash
foo() {
foo
}; foo
此段错误会在 8-10 秒后发生。通过 strace 检查,我们可以看到很多 brk() 调用:
brk(0x2e11000) = 0x2e11000
brk(0x2e12000) = 0x2e12000
brk(0x2e13000) = 0x2e13000
brk(0x2e14000) = 0x2e14000
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x7ffcddf5ff68} ---
+++ killed by SIGSEGV +++
Segmentation fault
我的问题是:
- 这是因为它试图访问内存空间中未映射的区域(通过 brk)而导致的段错误吗?
- 如果是,为什么要尝试访问它?
- malloc() 在这里会是更好的选择吗?
- 如果您对此有任何额外/琐碎的信息,我们将不胜感激。
【问题讨论】:
-
我猜这与递归中的堆栈损坏有关。