gpt4 book ai didi

c - 带指针的无限循环 - 为什么?

转载 作者:行者123 更新时间:2023-11-30 15:45:07 24 4
gpt4 key购买 nike

我对 C 和指针比较陌生。我正在尝试排序然后打印结构的链接列表。要么我遗漏了逻辑错误,要么我没有完全理解指针。有人可以向我解释一下这段代码中缺少什么吗?预先感谢您!

// *** Sort Linked List ( Merge Sort ) ***

struct address_node *newRoot;

// ptr, rearPtr, and tempRoot are also struct Pointers
newRoot = root;
root = root->next;

while (root != NULL)
{
tempRoot = root;
ptr = newRoot;
rearPtr = newRoot;

while (ptr != NULL)
{
printf("here");
if ((root->frequency) == (ptr->frequency))
{ // SPECIAL CASE: To determine read hierarchy for repeated
// Entries
if ((root->read_order) < (ptr->read_order))
{
if (ptr == newRoot)
{
root = root->next;
tempRoot->next = newRoot;
newRoot = tempRoot;
ptr = NULL;
}
else
{
root = root->next;
tempRoot->next = ptr;
rearPtr->next = tempRoot;
ptr = NULL;
}
}
}
else if ((root->frequency) > ptr->frequency)
{ // To ADD BEFORE an ENTRY
if (ptr == newRoot)
{
root = root->next;
tempRoot->next = newRoot;
newRoot = tempRoot;
ptr = NULL;
}
else
{
root = root->next;
tempRoot->next = ptr;
rearPtr->next = tempRoot;
ptr = NULL;
}
}
else if (ptr->next == NULL)
{ // if END OF LIST
root = root->next;
ptr->next = tempRoot;
ptr = NULL;
}
else
{ // SPOT NOT FOUND YET< MOVE FORWARD THROUGH LIST
rearPtr = ptr;
ptr = ptr->next;
}
}
}

// *** PRINT ***
ptr = newRoot;
if (numOut == 0)
{
while (ptr != NULL)
{
printf("0x%zx :%d\n", ptr->address, ptr->frequency);
ptr = ptr->next;
}
}
else
{
while (ptr != NULL && numOut > 0)
{
printf("0x%zx :%d\n", ptr->address, ptr->frequency);
numOut--;
ptr = ptr->next;
}
}

最佳答案

你所有的指针似乎都指向同一个东西,root。因此,在一种情况下,root 会向前移动,但随后您将 root->next 指向 root 后面的内容。因此,想象 root 指向 bob,而 root->next 指向 bill,假设你的第一个 if 嵌套都为 true,root = bill 但 root->next = bob。没有任何进展。

关于c - 带指针的无限循环 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19215462/

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