c - C函数返回一个字符串
问题描述
我试图toString
在 C 中创建一种这样的函数:
struct esploratore {
char nome[20];
char cognome[20];
int nascita;
int morte;
};
char *esploratoreToString(esploratore e) {
char *s = (char*) malloc(50 * sizeof(char));
snprintf(s, 50,
"%s %s %d %d",
e.nome, e.cognome, e.nascita, e.morte);
return s;
}
并以main
这种方式使用它:
printf("%s", esploratoreToString(e));
它有效,但问题是:malloc 分配的内存是否会被释放?
这是唯一的解决方案吗?
char *s = esploratoreToString(e);
...
printf("%s\n\n", s);
free(s);
解决方案
在您的原始代码中,不会释放内存。这是内存泄漏。
要正确调用此函数,您必须这样做
char *s = esploratoreToString(e);
printf("%s", s);
free(s);
如果您要进行esploratoreToString
分配,实际上没有任何办法解决这个问题。C 中动态分配的对象永远不会释放自己。(C++ 是另一个故事……)
(当然应该在继续之前esploratoreToString
检查是否成功......)malloc
推荐阅读
- ruby-on-rails - 具有多个连接和参数的 Rails 范围
- javascript - JQuery 按行标签过滤 DataTable 行
- c++ - 为什么两个结构内的向量具有相同的地址?
- linq - 当默认值具有多个多关系时,在 LINQ 中为 DefaultIfEmpty 方法设置默认值?
- mysql - res.send() 不适用于两个不同的回调
- django - django admin:我如何在多内联中使用 smart_selects
- flutter - Flutter 如何在 textTheme 中使用自定义词
- amazon-web-services - Elastic Beanstalk V3.0.1 (Amazon Linux 2) 中用于配置更新的挂钩
- ios - iOS Swift 不通过委托传回数据
- rest - 如何在没有 ID 的情况下从 TFS API 中特定板的所有工作项中获取列表?