C: 链表节点(结构中的结构)的malloc



在创建链表节点时,我很难使用malloc动态分配内存。

对于我的作业,我们必须使用以下结构定义:

typedef struct course {
    char *name;
    BST students;
} Course;
typedef struct courseNode {
    Course data;
    struct courseNode *next;
} *CourseList;

CourseList结构是实际的链表节点,而Course结构包含课程名称和注册学生的二进制搜索树。您会注意到结构体Course位于结构体CourseList内部。

我需要创建一个新的CourseList节点,给定一个字符串作为内部Course结构的name字段,使用基于字符串长度的动态分配。我已经尝试了根据字符串的长度对外部和内部结构进行mallocing的所有组合,但似乎无法将name字符串正确复制到内部结构中。我相信有一个简单的答案,但我找不到。

我已经尝试过根据字符串的长度对外部结构和内部结构进行mallocing的所有组合,但似乎无法将名称字符串正确复制到内部结构中。

这是因为字符串的长度不会改变分配固定大小的struct的方式。字符串需要单独分配,并分配给CourseListdataname成员:

CourseList newNode = malloc(sizeof(*newNode));
newNode->data.name = malloc(strlen(name)+1);
strcpy(newNode->data.name, name);

注意newNode前面的星号。这是因为CourseList是指针类型。

如果你真的想根据字符串长度对结构进行malloc:

  /* Assuming newname is a const char * with the course name,
   * course_head is the start of the linked, list,
   * and students should be zero initialized */
  CourseList newNode = malloc(sizeof CourseList);
  Course newCourse = malloc(sozeof(Course) + strlen(newname) + 1);
  memset(newCourse->students, 0, sizeof(BST));
  newCourse->name = (char *)newCourse + sizeof(newCourse);
  strcpy(newCourse->name, newname);
  newNode->data = newCourse;
  newNode->next = course_head;
  course_head = newNode;

这将课程结构放置在与课程名称相同的内存缓冲区中。

相关内容

  • 没有找到相关文章

最新更新