Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 二进制处理树给出错误的结果_C_Fork - Fatal编程技术网

C 二进制处理树给出错误的结果

C 二进制处理树给出错误的结果,c,fork,C,Fork,我必须制作一个二进制处理树来对一些记录进行排序,但我在创建过程中遇到了困难。 我正在使用此递归代码生成一个进程的二叉树: void proc_tree(int i, int current_depth, int max_depth, int rec, int offset) { pid_t kid = fork(); if(kid == 0) { printf("[%d,%d]: start: %d, end: %d\n", i, current_depth, rec, o

我必须制作一个二进制处理树来对一些记录进行排序,但我在创建过程中遇到了困难。 我正在使用此递归代码生成一个进程的二叉树:

void proc_tree(int i, int current_depth, int max_depth, int rec, int offset)
{
  pid_t kid = fork();

  if(kid == 0)
  {
    printf("[%d,%d]: start: %d, end: %d\n", i, current_depth, rec, offset);

    if(current_depth < max_depth)
    {
      int nodes= pow(2, current_depth);

      if(i >= nodes)
       i = 0;

      proc_tree(2*i+1, current_depth+1, max_depth, rec, offset/2);
      proc_tree(2*i+1, current_depth+1, max_depth, offset/2, offset);
    }
   }
}
如您所见,大多数值都很好,但在depth=2时,第一个节点([1,2])和([2,2])的值错误。因为我们在depth=2时总共得到了181条记录,所以有4个节点,所以每个节点应该管理大约45条记录。所以[1,2]应该是91136 [2,2]应该是137180

我是这样从main调用函数的

proc_tree(0, 0, 2, 0, 180);
任何帮助都将不胜感激。
提前感谢。

您确实意识到,
fork
创建了一个新进程,每个进程都有自己的内存副本

此外,操作系统还可以按照其认为合适的任何顺序进行处理


我猜你在考虑递归。在这种情况下,你不需要叉子

是的,我知道fork会创建父级地址内存的副本。我被要求为作业创建一个二进制处理树,我在互联网上找到了这个解决方案,因为我不知道如何使它正常工作……但这也不起作用。我并不担心结果的顺序,因为我熟悉时间安排,至少是基本的时间安排。事实上,这是与建议的联系,尽管输出在深度2排序,但过程应该有0,45--46,90--91136--137,80。至少应该是这样的,我不知道我是否遗漏了什么,但是因为我使用这些参数调用函数,并且fork在该函数中被调用,所以打印的值不应该是我得到的值(我想应该是的,因为我得到了它们,我不知道为什么)。我不想让自己听起来像个混蛋……我只是太累了,无法完成这项任务。
proc_tree(0, 0, 2, 0, 180);