免费字符*:无效的下一个大小(快)

在连接过程之后,我释放了char *。
但是我收到这个错误:

免费():无效的下一个大小(快):0x0000000001b86170

以下是我的代码:

void concat(stringList *list) { char *res = (char*)malloc(sizeof(char*)); strcpy(res, list->head->string); list->tmp = list->head->next; while (list->tmp != NULL) { strcat(res, ","); strcat(res, list->tmp->string); list->tmp = list->tmp->next; } printf("%s\n", res); free(res); } 

你的代码是错误的。

您正在为单个指针( malloc(sizeof(char*)) )分配空间,但没有字符。 你用所有的string覆盖你的分配空间,导致未定义的行为(特殊情况下,会损坏malloc()的簿记数据)。

你不需要为指针( res )分配空间,这是一个局部variables。 您必须为指针所保存的地址处的所有字符分配空间。

既然你要遍历一个列表来查找要连接的string,你不能预先知道总的大小。 你将不得不在列表中做两遍:一个是对每个stringstrlen()进行求和,然后为分隔符和终止符分配这个加号空间,然后在实际进行并置时再分配一次。