c语言 - 为什么我的链表没有更新?



使用调试器,链表似乎在函数内部成功创建,但它没有在main的"外部"更新。我不知道为什么它没有更新,因为我使用的是地址和动态内存分配,如果我没记错的话,一旦退出函数,它就不会被"清除"。

int populate(node* list)
{
node* temp = NULL;
while(1)
{
printf("insert word: ");
char* word = getstring();
if(strcmp(word, "stop") == 0)
{
break;
}

//create a node
node* n = malloc(sizeof(node));
if(n == NULL)
{
return 1;
}

//put stuff in node
n->word = word;
n->next = NULL;

if (list == NULL) //first case only
{
list = n;
temp = n;
}
else
{
//set previous next to current node
temp->next = n;

//set pointer to current node
temp = temp->next;
}

}
}
int main()
{
node* list = NULL;

while(1)
{
printf("insert command: ");
char* word = getstring();

if (strcmp(word, "stop") == 0)
{
break;
}
else if (strcmp(word, "add") == 0)
{
populate(list);
}
else if (strcmp(word, "read") == 0)
{
readList(list);
}
}
}

另外,在我的代码运行后,我分配的内存是否会自动释放?还是每次测试程序时都会吞噬计算机内存的小块。(我正在使用Xcode(

您需要将指针node* list作为双指针(指针到指针(而不是指针传递:

int populate(node** list)
{

这是因为C语言具有价值语义。一切都按值传递。因此,当您将list传递给populate()时,您将创建原始指针的副本。它们都指向同一内存,但对其中一个指针的更改不会反映在另一个指针中。这就是您的列表永远不会更新的原因。

其他一切都将基本保持不变。调用 popate 函数时,需要传递list的地址:

populate(&list);

populate()函数中,每次出现list都会变得*list,因为您需要取消引用它以获取原始指针。

相关内容

  • 没有找到相关文章

最新更新