结构中元素的 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;
}
我是 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;
}