我是C的新手,所以这也许很明显,但是我仍然不确定。 Java为我照顾了这个^^

我有一个替换表,输入字符串和一个对字符串进行某些工作的函数str_replacestr_replace在内部调用malloc以获取新字符串的空间(它返回新分配的char *。

char* color_tags(char* s) {

    char* out = s;

    // in real, the table is much longer
    static char* table[4][2] = {
        {"<b>", BOLD},
        {"<u>", UNDERLINE},
        {"</b>", BOLD_R},
        {"</u>", UNDERLINE_R},
    };


    for(int r=0; r<4; r++) {
        // here's what bothers me
        out = str_replace(table[r][0], table[r][1], out);
    }

    return out;
}


如您所见,char* out被指向新字符串的指针替换,因此旧字符串显然会导致内存泄漏-如果我不完全理解的话。

有什么更好的方法呢?

最佳答案

该代码总共泄漏3个字符串:每个迭代之后一个,最后一个除外。解决的办法是在使用每个字符串后对其进行释放。代码可能如下所示:

for(int r=0; r<4; r++) {
    char* new_out = str_replace(table[r][0], table[r][1], out);
    if (r>0) {
        // out is an intermediate value which will never be used again, free it
        free(out);
    }
    out = new_out;
}

10-07 19:46
查看更多