【发布时间】:2017-07-17 04:57:26
【问题描述】:
考虑以下函数:
char* color(const char* clr, char* str)
{
char *output = malloc(strlen(str)+1);
/* Colorize string. */
sprintf(output, "%s%s%s", clr, str, CLR_RESET);
return output;
}
上述函数允许我们在 linux 终端打印彩色消息。
所以我可以写
printf("%s", color(CLR_RED, "This is our own colorized string"));
并查看红色消息This is our own colorized string。
我关心的是color() 中分配的output 字符串。当函数返回一个分配的元素(在我们的例子中是数组)时,我们有点需要释放它(C 没有垃圾收集器)。
我的问题是,output 在传递给printf() 之后会发生什么?当我们退出函数printf() 时,数组仍然被分配?如果是,我们如何解除分配?有什么方法可以为我们编写一个函数吗?
提前致谢!
【问题讨论】:
-
规则很简单:对于
malloc(...)/calloc(...)/realloc(NULL, ...) /strdup(...)返回的每个值,都需要对free()进行一次调用,传递这个值。 -
@alk 谢谢。我只是想确定一下。
-
你也可以 printf("%s", CLR_RED "This is..." CLR_RESET);.字符串被连接起来。
-
@linuxfan 不错。
-
这仅在
CLR_RED是(某些宏扩展为)文字字符串时才有效