【发布时间】:2014-04-30 04:07:18
【问题描述】:
我是 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 被指向新字符串的指针所取代,因此旧字符串显然最终会导致内存泄漏——如果我完全理解错误的话。
有什么更好的方法呢?
【问题讨论】:
-
呃……你还有 s 飘来飘去。只要不在别处修改,以后就可以
free(s);了。 -
str_replace是否释放旧字符串? -
不,它没有。为了完整起见,这里是我得到 str_replace 的地方:binarytides.com/str_replace-for-c
-
哦,不。这是缺乏理解的复制/粘贴。
-
我自己编写了这段代码,它只是我从其他来源获得的 str_replace。我的弦乐还不是很好。无论如何,您可以看到它的作用。
标签: c memory malloc memory-leaks