gpt4 book ai didi

c - 无法构建 'queue-like' 结构 - 结构声明有问题吗?

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:42 24 4
gpt4 key购买 nike

大家好。这是一个非常简单的问题,我敢肯定,但我像往常一样让自己纠结在 C 引用/指针中。我正在尝试构建一个...队列,使用一种链表。基本上,我有一个包含内容和指向下一个元素的指针的结构。我还有一个指向第一个和最后一个元素的指针。然后我有一个循环将构建“排序队列”。我的问题是要么我的逻辑失败并且我没有正确初始化队列,要么我对 C 结构的了解失败(这很可能)并且我最终只是创建一个结构并不断引用它。

我的测试代码如下:

#include <stdio.h>

struct test {
int contents;
struct test *next;
};

main() {

struct test *first = NULL;
struct test *last = NULL;
int i;

for (i = 0; i < 2; i++) {
struct test tmp;
if (first == NULL) {
first = &tmp;
last = &tmp;
} else {
last->next = &tmp;
last = &tmp;
}
tmp.x = i;
tmp.next = NULL;
}

while (first != NULL) {
printf("%d\n", first->x);
first = first->next;
}

return 0;

}

运行它,我得到的输出首先似乎指向一个测试结构,该结构的值为“1”,因为它是“x”变量——所以不是我想要的初始结构。那么,我是不是在逻辑上失败了,还是我没有理解如何在循环中声明新的单独结构?或者两者兼而有之?我好累……>_<.

谢谢。

最佳答案

你遇到的问题是你正在获取一个临时变量的地址,tmp,并将它分配给一个比临时变量,first 生命周期长得多的指针和最后。在循环的每次迭代之后,临时文件消失并继续通过 firstlast 访问它会导致未定义的行为。

您需要在堆上创建一个值,以便像这样构建列表(为简洁起见,省略了错误检查)

struct test* tmp = malloc(sizeof(struct test));

不过稍后您需要遍历并释放所有已分配的节点。

关于c - 无法构建 'queue-like' 结构 - 结构声明有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4072786/

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