无法更改struct中的指针字段

时间:2014-12-29 18:33:01

标签: c pointers struct

这是我第一次使用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 - 也许是因为'数据'无效?我真的很丢失...

1 个答案:

答案 0 :(得分:1)

只有当data传递给NULL时,字段newList()才应为NULL。

你说

  

(我检查并在函数内部它不是NULL)

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

对于最后一点,字段last不能是NULL。它指向对象本身(就好像它模仿C ++的this指针)。在last次检查通过后分配if (list == NULL)时,它肯定不等于NULL。 (正如保罗格里菲斯在评论中指出的那样。)