您的Rust函数
do_something构造一个临时对象
CString,将一个指针放入其中,然后 删除
CString。
*constc_char从返回的那一刻起,该无效。如果您每天晚上都在使用,则可能要使用
CString#into_ptr而不是
CString#as_ptr,因为前者会消耗
CString而不分配内存。在稳定的,你可以
mem::forget在
CString。然后,您可以担心谁应该释放它。
从Python释放将是棘手的或不可能的,因为Rust可能使用其他分配器。最好的方法是公开一个带
c_char指针的Rust函数,为该指针构造一个
CString(而不是将数据复制到新的分配中)并删除它。不幸的是,中间部分(创建
CString)目前暂时无法实现:
CString::from_ptr不稳定。
一种解决方法是将
_整个
CString_函数传递(指向)Python并提供访问器函数以从中获取char指针。您只需要对进行装箱
CString并将其转换为原始指针。然后,您可以使用另一个函数,将指针转换回框并放下。



