我在连接过程后释放char *。
但是我收到了这个错误:
free():下一个大小无效(快):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);
}
答案 0 :(得分:4)
你的代码错了。
您为单个指针(malloc(sizeof(char*))
)分配空间,但没有字符。您正在使用所有字符串覆盖已分配的空间,从而导致未定义的行为(在特定情况下,会损坏malloc()
的簿记数据)。
您不需要为指针(res
)分配空间,它是一个局部变量。您必须为您希望存储在指针所占地址的所有字符分配空间。
由于您将遍历列表以查找要连接的字符串,因此您无法预先知道总大小。您将不得不在列表上进行两次传递:一次对每个strlen()
的{{1}}求和,然后为分隔符和终止符分配该空间,然后在实际执行concatenenation。