我正在使用
Swift编译器的Bridging Header功能来调用使用malloc()分配内存的C函数.然后它返回一个指向该内存的指针.函数原型是这样的:
char *the_function(const char *);
在Swift中,我使用它像这样:
var ret = the_function(("something" as Nsstring).UTF8String) let val = String.fromCString(ret)!
请原谅我对Swift的无知,但通常在C中,如果the_function()是malloc的内存并返回它,那么其他人需要在某个时候释放()它.
这是由Swift以某种方式处理还是我在这个例子中泄漏内存?
提前致谢.
解决方法
Swift不管理用malloc()分配的内存,你最终必须释放内存:
let ret = the_function("something") // returns pointer to malloc'ed memory let str = String.fromCString(ret)! // creates Swift String by *copying* the data free(ret) // releases the memory println(str) // `str` is still valid (managed by Swift)
请注意,Swift String会自动转换为UTF-8
传递给带有const char *参数的C函数的字符串
如String value to UnsafePointer<UInt8> function parameter behavior所述.
这就是为什么
let ret = the_function(("something" as Nsstring).UTF8String)
可以简化为
let ret = the_function("something")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。