[英]can't change pointer fields in struct
这是我第一次使用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之后,字段“数据”为NULL(我检查过,在函数内部,它不是NULL)。 我还添加了一个不是指针的测试字段,在函数返回ListRef之后,该字段保持不变。 这使我相信,这与我在一个指针中返回一个指针有关,但是我真的不明白我在做什么错。 此外,字段“ last”也不为NULL-可能是因为“ data”为空吗? 我真的很迷路...
仅当将NULL
传递给newList()
的调用时,字段data
应为NULL。
你说
(我检查并在函数内部它不是NULL)
如果要在执行list->data = headData;
之前与调试器进行检查list->data = headData;
行,因为它尚未初始化,所以很可能不会为NULL。 在执行该行之后,它应该是headData
包含的任何地址(这是函数参数)。
对于最后一点,字段last不能为NULL
。 它指向对象本身(就像它模仿C ++的this
指针一样)。 由于在if (list == NULL)
检查通过后才分配last
,因此它肯定不等于NULL
。 (正如Paul Griffiths在评论中指出的那样。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.