gpt4 book ai didi

c++ - 编写一个将链表中的两个节点组合在一起的函数

转载 作者:行者123 更新时间:2023-11-28 07:06:09 26 4
gpt4 key购买 nike

我在我的内存管理器程序中编写了一个函数,它查看链表,并测试节点是否在物理上按字节相邻,然后将它们合并为一个。有可能物理上与空闲节点相邻的节点当前正在持有内存,在这种情况下它不会被合并。我无法弄清楚如何让它工作,我一直在无限循环或没有合并。

void IfFreeTogether(void)
{
FREEPTR l =freelist;
FREEPTR f = freelist;
FREEPTR g = f->next;
int i = 0;
while(l!=NULL)
{

if(f->start_byte-1 == g->end_byte)
{
g->size = g->size + f-> size;
g->end_byte = f-> end_byte;
g->next = f->next;

l=g->next;
}

if(f->end_byte+1 == g->start_byte)
{
f->size = f->size + g-> size;
f->end_byte = g-> end_byte;
f->next = g->next;

l=f->next;
}
}
}

最佳答案

从您发布的代码片段看来,l 是循环中唯一被赋予新值的变量,但是 fg是唯一被读取的(尽管事实上它们只被初始化一次并且之后再也没有改变)。

这意味着您没有对列表进行任何更改。更糟的是 - 因为 l 只被 gf 赋值,你实际上甚至没有在任何新的地方推进 l ,可能会导致无限循环(除了你实际设法合并整个列表的极端情况)

关于c++ - 编写一个将链表中的两个节点组合在一起的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21723772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com