这是我第一次使用struct,所以如果它太基础我很抱歉... 我有一个结构,将指针保持为字段:
struct List;
typedef struct List* ListRef;
struct List{
void *data;
ListRef next;
ListRef last;
};
我尝试创建一个指向struct的新指针,这是我写的函数:
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后保持不变。这让我相信它与我在指针内返回一个指针有关,但我并不真正理解我做错了什么。此外,该字段'最后'不是NULL - 也许是因为'数据'无效?我真的很丢失...
答案 0 :(得分:1)
只有当data
传递给NULL
时,字段newList()
才应为NULL。
你说
(我检查并在函数内部它不是NULL)
如果您的意思是在执行list->data = headData;
行之前使用调试器进行检查,则很可能不会为NULL,因为它尚未初始化。
在执行该行之后,它应该是headData
包含的任何地址(这是函数参数)。
对于最后一点,字段last不能是NULL
。它指向对象本身(就好像它模仿C ++的this
指针)。在last
次检查通过后分配if (list == NULL)
时,它肯定不等于NULL
。 (正如保罗格里菲斯在评论中指出的那样。)