字符串操作中的双重自由错误

vin*_*dyz 2 c string malloc

如果长字符串通过,则获得以下代码的双倍空闲.我尝试过各种各样的事情.如果我删除了自由线,它会消失.不知道为什么会这样.

void format_str(char *str1,int l,int o) {
    char *s = malloc(strlen(str1)+1);
    char  *s1=s, *b = str1;
    int i=0;
    while(*str1!='\0') {
        i++;
        *s1++=*str1++;

        if(i>=l) {
            if(*str1!=',') {
                continue;
            }
        *s1++=*str1++;
            *s1++='\n';
            for(i=0;i<o;i++) {
                *s1++=' ';
            }
            i = 0;
        }
    }
    *s1 = '\0';
    strcpy(b,s);
    free(s);
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*ill 5

您可能没有s为要复制的数据量分配足够的空间.我不知道你的逻辑是做什么的,但我看到了类似的东西

        *s1++=*str1++;
        *s1++='\n';
Run Code Online (Sandbox Code Playgroud)

你将一个以上的角色复制到s(通过s1)一个角色的地方str1.

对于所有可计算的爱,使用更好的变量名!