使用 StringValueCStr 后内存是否释放?
Is memory freed after using StringValueCStr?
我使用 StringValueCStr 将 ruby 字符串转换为 char*。当不再需要这个新的 C 字符串时,我是否需要释放内存?
如果这个新的 C 字符串被自动释放,这是否意味着如果我打算将它保存在我的 C 结构中供以后使用,我应该复制它?
StringValueCStr
returns 与 StringValuePtr
相同的指针——它是对象的内部字符串缓冲区。
该缓冲区可能会因 String 实例的任何后续突变(或者当然是垃圾收集)而更改或失效,所以是的,如果您需要保留它,您应该复制它。
我使用 StringValueCStr 将 ruby 字符串转换为 char*。当不再需要这个新的 C 字符串时,我是否需要释放内存?
如果这个新的 C 字符串被自动释放,这是否意味着如果我打算将它保存在我的 C 结构中供以后使用,我应该复制它?
StringValueCStr
returns 与 StringValuePtr
相同的指针——它是对象的内部字符串缓冲区。
该缓冲区可能会因 String 实例的任何后续突变(或者当然是垃圾收集)而更改或失效,所以是的,如果您需要保留它,您应该复制它。