为什么在尝试访问结构成员时会出现段错误?
Why do I get a segfault when trying to access members of struct?
每当我尝试打印存储在结构中的值时,我都会遇到分段错误。使用 Valgrind,我能够将它缩小到一个代码块,但我不确定我做错了什么。我是否错误地初始化了我的结构?
每当我 运行 valgrind 时,它告诉我有一个 大小为 8 的无效写入,我说 newList->data = d .
typedef struct List {
struct List *np[Ends]; // next/prev neighbors
Data data;
} *List;
typedef void *Data;
static void put(Data d) {
List newList = malloc(sizeof(List));
newList->data = d;
}
这是一个例子,说明为什么 typedef
指针是不好的做法。
因为 List
被定义为 struct List *
的别名,sizeof(List)
给你的是指针的大小,而不是结构的大小。因此,您没有分配足够的内存。
您想要 malloc(sizeof(struct List))
或(最好)malloc(sizeof *newlist)
每当我尝试打印存储在结构中的值时,我都会遇到分段错误。使用 Valgrind,我能够将它缩小到一个代码块,但我不确定我做错了什么。我是否错误地初始化了我的结构?
每当我 运行 valgrind 时,它告诉我有一个 大小为 8 的无效写入,我说 newList->data = d .
typedef struct List {
struct List *np[Ends]; // next/prev neighbors
Data data;
} *List;
typedef void *Data;
static void put(Data d) {
List newList = malloc(sizeof(List));
newList->data = d;
}
这是一个例子,说明为什么 typedef
指针是不好的做法。
因为 List
被定义为 struct List *
的别名,sizeof(List)
给你的是指针的大小,而不是结构的大小。因此,您没有分配足够的内存。
您想要 malloc(sizeof(struct List))
或(最好)malloc(sizeof *newlist)