我是C的新手,所以这也许很明显,但是我仍然不确定。 Java为我照顾了这个^^
我有一个替换表,输入字符串和一个对字符串进行某些工作的函数str_replace。 str_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;
}