空闲字符*:下一个大小无效(快速)

noo*_*bie 1 c malloc free

我在连接过程后释放一个 char* 。
但我收到此错误:

free(): 无效的下一个大小 (fast): 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);
}
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 5

你的代码是错误的。

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

您不需要为指针 ( res)分配空间,它是一个局部变量。您必须为要存储在指针持有的地址处的所有字符分配空间。

由于您将遍历列表以查找要连接的字符串,因此您无法预先知道总大小。您将不得不对列表进行两次传递:一次对strlen()每个 的求和string,然后为分隔符和终止符分配该加空间,然后在您实际进行串联时再一次传递。