链表的C内存分配

C memory allocation for linked list

我正在尝试创建一个基本上包含字符串(而不是字符数组)的链表。我不断收到分段错误(核心已转储)并且我不确定 where/how 我分配内存错误

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct mystring
{
    char letter;
    int size;
    int isHead;
    struct mystring*next;
};

struct mystring * create_empty_string(int size)
{   
    struct mystring * string = malloc(sizeof(struct mystring));
    string->size = size;
    string->isHead = 0;
    return string
}

struct mystring * make_string(struct mystring * list,char * string)
{ 
    for(int i = 0 ; i < strlen(string) ; i++)
    {
        list->letter= string[i];
        list = list->next;
    }
    return list;
}
void printList(struct mystring* list) {

   //start from the beginning
   while(list->letter != '[=10=]') {
      printf("(%c) ",list->letter);
      list = list->next;
   }
}
int main()
{
    struct mystring * string = create_empty_string(10);
    string = make_string(string, "hey");
    printList(string);
}

letter 被定义为 char letter; 并且您的编译器允许您执行 string->letter = malloc(sizeof(char)); 而不会抱怨时,这意味着您正在尝试在不启用任何警告的情况下进行编译。你不会那样走得太远。弄清楚如何在你的编译器上启用 all 警告,然后可能会稍微处理警告以禁用真正烦人的警告,从那一刻起在你的编译器上将帮助你避免做一些无意义的事情,比如将 malloc() 的结果分配给 char.

如前所述,您的 create_empty_string() 函数构造不当。我建议通过将单个字符输入一个名为 append_to_string() 或类似函数的函数来构建 linked 列表,一次一个节点,这将创建一个新节点并将其 link 到先前的构造列表(如果它是第一个节点,则成为列表本身)。