这个 c 递归函数是否有任何原因产生这个页面错误?

Is there any reason this c recursive function generates this pagefault?

所以我想用 c 编写递归系统调用,它从进程(孩子、孙子、..)中获取所有后代。我使用的系统是 Minix 3.2.1,但我认为它与大多数 UNIX 系统应该没有太大区别。但是我的函数抛出非常难看的错误。 代码如下:

int do_whoMaxDescendants(void)
{
  int maxChildren = 0;
  pid_t found = -1;

  for (int proc_nr = 0; proc_nr < NR_PROCS; ++proc_nr)
  {
    if (mproc[proc_nr].mp_flags & IN_USE)
    {
      int children = kidCount(proc_nr);
      if (children > maxChildren)
      {
        maxChildren = children;
        found = mproc[proc_nr].mp_pid;
      }
    }
  }
  return found;
}

int kidCount(int currParent)
{
  int children = 0;
  for (int nextParent = 0; nextParent < NR_PROCS; ++nextParent)
  {
    if ((mproc[nextParent].mp_flags & IN_USE) && (mproc[nextParent].mp_parent == currParent))
    {
      children++;
      children = kidCount(nextParent) + children;
    }
  }
  return children;
}

错误如下所示:

您正在编写 Minix 内核代码。 The Minix kernel stack is 4096 bytes. 任何重要的递归都可能溢出它,这可能是页面错误的原因。请注意,错误地址接近页面末尾,可能是堆栈页面下方的下一页,它可能是未映射的保护页面,因此堆栈溢出会在损坏其他数据之前发生恐慌。

所以你需要想出一个不使用递归的算法。