この「無限」ループのセグメンテーション違反がすぐに発生する理由を誰かが説明できますか? たとえば、次の関数があるとします。
#!/bin/bash
foo() {
foo
}; foo
この segfault は 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() の方が良い選択でしょうか?
- これに関する追加/トリビア情報があれば、それをいただければ幸いです。