繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM