C语言 多次使用函数时程序崩溃



我需要在我的程序中使用链表算法。我将快速解释它需要做什么:

我的程序生成一个最大大小为 2.000 的字符串。我需要创建以下类型的元素的链接列表:

typedef struct List * News;

 struct List { 
 char * Text; 
 News next;
} ;

由于结构的最大大小为 2.000,要将一个结构的信息放在我的文本字段中,我想使用结构的确切大小。因此,我制作了以下函数来在链表顶部创建和添加一个元素:

void InsertLL (News p, char M[]){
 char * text = (char *)malloc(strlen(M) * sizeof(char));
 strcpy(text, M);
 News s,t;
 t = malloc(sizeof(struct List));
 t-> Text = text;
 s=p;
 p=t;
 t -> next = s;
 }

程序在无限循环中运行,运行一段时间后,它崩溃了。如果没有函数 InsertLL,它运行良好(例如,如果我不关心结构的大小并将其直接放在我的元素上)。在调试模式下,它不会崩溃,所以我认为这是某种我还无法解决的内存问题。

当我打电话给malloc时,我做错了什么吗?

感谢您的帮助!

您没有为文本分配足够的空间。您还应该考虑空字符的空间,因此分配 strlen(M)+1 字节。

sizeof(char)始终是一个字节,您无需对 malloc 结果进行类型转换,因为 void * 会自动安全地提升为任何其他指针类型。

将代码更改为char * text = malloc(strlen(M)+1);

您没有为空终止符分配空间。分配字符串时将 strlen()+1 传递给 malloc。请记住,strlen() 返回字符串的长度,不包括 null 终止字符。

请注意,根据定义,sizeof(char) 为 1,并且不应强制转换 malloc 的返回值。你的代码应该是

char * text = malloc(strlen(M) + 1);

相关内容

  • 没有找到相关文章

最新更新