使用这样的基本示例时,我遇到了分段错误。我认为这是由于数据的大小没有得到修复。如何将可变长度数据附加到结构?
struct Node {
char * data;
struct Node* next;
};
void compareWord(struct Node** head_ref, char * new_data) {
if (strcmp((*head_ref)->data, new_data) > 0) {
head_ref->data = new_data;
}
}
int main(int argc, char* argv[]) {
struct Node* head = NULL;
head->data = "abc";
char buf[] = "hello";
compareWord(&head, buf);
return 0;
}
答案 0 :(得分:3)
How can I have variable length data attached to a struct?
答案是 - 否,你不能。原因是结构的大小应该在编译时知道。
分段错误的原因是,您的程序在为其分配内存之前正在访问head
指针:
struct Node* head = NULL;
head->data = "abc";
在使用head
之前分配内存:
struct Node* head = NULL;
head = malloc (sizeof(struct Node));
if (NULL == head)
exit(EXIT_FAILURE);
head->data = "abc";
确保在完成内存后释放已分配的内存。
C99标准中引入了一些称为Flexible Array Member(FAM)的内容。这可能是你感兴趣的。