gpt4 book ai didi

C: do-while 释放链表

转载 作者:行者123 更新时间:2023-12-04 11:05:50 24 4
gpt4 key购买 nike

我注意到这可以正常工作,但我没想到它会:

  do {
free(params);
} while ((params = params->next));

通常我会使用这样的东西,但看起来不那么优雅:

  do {
params_t *next = params->next;
free(params);
params = next;
} while (params);

(代码暗示 params 已分配)

或者:

  while (params) {
params_t *next = params->next;
free(params);
params = next;
}

可能不相关,但我将 -std=gnu11clang 一起使用。

第一段代码有效吗?

最佳答案

您的第一个版本不正确,在调用 free() 后依赖于内存内容是未定义的行为。它可能会起作用,但这只是未定义的行为发生在做一些看似明确定义的事情上。事实并非如此。

您当然可以使用正确的循环结构,并拥有更好的生活:

for (params_t *next; params != NULL; params = next)
{
next = params->next;
free(params);
}

这似乎是比其他替代方案更好的匹配,因为您可以有效地使用 for 构造的各种子句。它仍然是两行代码,但也存在代码过于简洁的问题。 :)

关于C: do-while 释放链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35892675/

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