【发布时间】:2020-02-11 19:48:37
【问题描述】:
我知道,任何动态分配的内存都必须在使用结束时释放,free()。
但是,我确实有一个提供以下功能的库:
char *rsprintf_s(const char *format, ...);
它与asprintf 做同样的事情,但直接返回在该函数中动态生成的字符串。例如:
int main()
{
char *my_str = rsprintf_s("A number: %d, a string: %s.", 42, "StackOverflow");
printf("`rsprintf_s` result: '%s'", my_str);
return 0;
}
这会产生以下结果:`rsprintf_s` 结果:'一个数字:42,一个字符串:“StackOverflow”'。
我想这个程序中存在内存泄漏,这将迫使我这样做:
int main()
{
char *my_str = rsprintf_s("A number: %d, a string: %s.", 42, "StackOverflow");
printf("`rsprintf_s` result: '%s'", my_str);
free(my_str);
return 0;
}
但是,它是惯用的功能吗?如果存在,那么在这种情况下不释放内存是否被认为是一个小问题?我想知道这样的功能是否可以不用担心每次都释放内存,虽然我对此表示怀疑。
【问题讨论】:
-
“如果存在,那么不释放是不是小问题” 为什么这个函数存在意味着内存泄漏是一个“小问题”?
-
调用者有责任在使用完内存后
free。您有责任记录您的函数分配内存并且调用者拥有该内存的事实(即必须free它)。有关示例,请参见strdup的手册页。 -
rsprintf_s定义在哪里?