链表的C内存分配

时间:2017-04-13 18:39:52

标签: c linked-list abstract-data-type

我试图创建一个基本上包含字符串(而不是字符数组)的链接列表。我一直在分段错误(核心转储),我不知道我在哪里/如何分配内存错误

#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 != '\0') {
      printf("(%c) ",list->letter);
      list = list->next;
   }
}
int main()
{
    struct mystring * string = create_empty_string(10);
    string = make_string(string, "hey");
    printList(string);
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如上所述,您的create_empty_string()函数构造不良。我建议通过将单个字符输入到名为append_to_string()或类似的函数中,一次构建一个节点的链表,这将创建一个新节点并将其链接到先前构建的列表(如果它是&#39;是第一个节点。)