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);