分段错误与字符串比较

时间:2018-01-27 20:59:34

标签: c struct segmentation-fault

使用这样的基本示例时,我遇到了分段错误。我认为这是由于数据的大小没有得到修复。如何将可变长度数据附加到结构?

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;
}

1 个答案:

答案 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)的内容。这可能是你感兴趣的。