我试图创建一个基本上包含字符串(而不是字符数组)的链接列表。我一直在分段错误(核心转储),我不知道我在哪里/如何分配内存错误
#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);
}
答案 0 :(得分:1)
当letter
定义为char letter;
并且您的编译器允许您在没有抱怨的情况下执行string->letter = malloc(sizeof(char));
时,这意味着您正在尝试编译而不会启用任何一点警告。你不会那么远。弄清楚如何在编译器上启用 所有 警告,然后可能会对警告进行一些操作以禁用真正烦人的警告,从那时起编译器将会有所帮助你要避免做一些无意义的事情,比如将malloc()
的结果分配给char
。
答案 1 :(得分:0)
如上所述,您的create_empty_string()函数构造不良。我建议通过将单个字符输入到名为append_to_string()或类似的函数中,一次构建一个节点的链表,这将创建一个新节点并将其链接到先前构建的列表(如果它是&#39;是第一个节点。)