gpt4 book ai didi

c - 使用指针销毁双端队列并在 C 中释放

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:22 26 4
gpt4 key购买 nike

我正试图破坏我的双端队列,但不知何故我失败了。我写了下面的代码(deque是一个指针,它指向deque的第一个元素)。 DequeItem 是具有下一个字段(指向下一个元素的指针)和数据(void *)的结构。

void deque_destroy(DequeItem **deque) {
DequeItem *temp;
DequeItem *item;
for (item = *deque; item != NULL; item = temp) {
printf("%d", *((int*)((item)->data)));
temp = item->next;
free(item);
}
}

结构声明是:

struct DequeItem {
void *data; // Data stored in the deque item

struct DequeItem *previous; // Pointer to the previous DequeItem in the ring
struct DequeItem *next; // Pointer to the next DequeItem in the ring
};

typedef struct DequeItem DequeItem;

最佳答案

看起来正确,读出 temp 之前你对项目调用 free() 做得很好,这是一个常见的初学者错误你已经避免了。

我认为您需要提供有关问题所在的更多信息,也许还需要提供结构声明。

data 成员也是动态分配的内存吗?如果是这样,您可能需要一个 free(item->data); 调用,这也取决于创建项目时它是如何分配的。

正如评论者所指出的,您的 data 指针可能是 NULL 因此您应该在打印前检查它:

if(item->data != NULL)
printf("%d\n", *(int *) item->data);

注意:

  • Simplification转换表达式更易于阅读。
  • printf() 字符串中包含换行符 ('\n') 以避免缓冲混淆并在视觉上分隔值。

关于c - 使用指针销毁双端队列并在 C 中释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10311125/

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