【发布时间】:2019-05-08 11:50:51
【问题描述】:
我使用 StringValueCStr 将 ruby String 转换为 char*。当不再需要这个新的 C 字符串时,我是否需要释放内存?
如果这个新的 C 字符串被自动释放,这是否意味着如果我打算将它保存在我的 C 结构中以供以后使用,我应该复制它?
【问题讨论】:
标签: c ruby ruby-c-extension
我使用 StringValueCStr 将 ruby String 转换为 char*。当不再需要这个新的 C 字符串时,我是否需要释放内存?
如果这个新的 C 字符串被自动释放,这是否意味着如果我打算将它保存在我的 C 结构中以供以后使用,我应该复制它?
【问题讨论】:
标签: c ruby ruby-c-extension
StringValueCStr 返回与StringValuePtr 相同的指针——这是对象的内部字符串缓冲区。
该缓冲区可能会因 String 实例的任何后续突变(或者,当然,垃圾回收)而更改或失效,所以是的,如果需要保留它,您应该复制它。
【讨论】: