gpt4 book ai didi

无法更改结构中的指针字段

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

这是我第一次使用 struct,所以如果它太基础,我深表歉意......我有一个将指针保留为字段的结构:

struct List;
typedef struct List* ListRef;

struct List{
void *data;
ListRef next;
ListRef last;
};

我尝试创建一个指向该结构的新指针,这是我编写的函数:

ListRef newList(void* headData){
struct List *list= malloc(sizeof(struct List));
if (list == NULL){
return NULL;
}

list->data = headData; // I checked here and list-> !=NULL
list->next = NULL;
list->last = list;
return list;
}

问题是函数返回 ListRef 后,字段“data”为 NULL(我检查过,在函数内部它不是 NULL)。我还添加了一个不是指针的测试字段,并且在函数返回 ListRef 后该字段保持不变。这让我相信这与我在指针中返回指针有关,但我真的不明白我做错了什么。另外,字段“last”不为 NULL - 也许是因为“data”为空?我真的有点迷失了......

最佳答案

仅当您将 NULL 传递给 newList() 的调用时,字段 data 才应为 NULL。

你说

(I checked and inside the function it's not NULL)

如果您的意思是在执行 list->data = headData; 行之前使用调试器进行检查,则它很可能不会为 NULL,因为它尚未初始化。该行执行后,它应该是 headData 包含的任何地址(这是函数参数)。

对于最后一点,字段last 不能为NULL。它指向对象本身(就好像它模仿 C++ 的 this 指针)。由于last是在if (list == NULL)检查通过后赋值的,所以它肯定不等于NULL。 (正如 Paul Griffiths 在他的评论中指出的那样。)

关于无法更改结构中的指针字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27694116/

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