结构中元素的 C 顺序

C order of elements in a struct

我是 C 的新手,我想知道结构中元素的顺序是否重要。

我有以下结构:

struct list
{
    struct list_el *head;
    int size;
}

我用这个做链表。 head 指向第一个元素,size 表示列表中元素的数量。

我也有以下函数来初始化列表。

typedef struct list list;

list* list_init()
{
    list *list = malloc(sizeof(list));
    if(list)
    {
        list->head = NULL;
        list->size = 0;
        return list;
    }
    return NULL;
}

程序编译正常,没有任何错误、警告或注释,但是当我 运行 使用 valgrind 的程序时,它说我在 list_init() 的行上有一个大小为 4 的无效写入我将 0 分配给 list->size 的函数。每次访问 size 变量时,我都有相同的无效 read/write。我不知道为什么。此外,当我切换两个结构元素时(先声明 size,然后声明 head),我在将 NULL 分配给 head 然后 size 的行上得到无效写入] 变量使用得很好。任何人都可以向我解释为什么会发生这种情况以及如何解决它吗?

最后注意:此处显示的结构是在头文件中定义的,而函数在 C 文件中。不确定这是否重要。

您将变量命名为与类型同名,因此 sizeof(list) 实现为变量(指针)的大小,而不是结构的大小。该结构有一个指针和一个整数,所以大小会比指针大,所以访问未分配的地方。

重命名变量。

示例:

list *list_init(void)
{
    list *list_data = malloc(sizeof(list));
    if (list_data)
    {
        list_data->head = NULL;
        list_data->size = 0;
        return list_data;
    }
    return NULL;
}