有人可以解释为什么这个“无尽的”循环会很快出现段错误吗?例如,假设我们有这个功能:
#!/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() 在这里会是更好的选择吗?
- 如果您对此有任何额外/琐事信息,我们将不胜感激。