【发布时间】:2016-09-02 02:28:31
【问题描述】:
我在一个 FFI 库中工作,遇到过很多次这种模式,我不知道如何习惯性地处理。
impl CanVoidStar for str {
fn as_cvoid_ptr(&self) -> *const c_void {
let string = CString::new(self).unwrap();
unsafe {
return mem::transmute(string.as_ptr());
}
}
}
我的意图是创建一个const *void 指向一块内存的指针,我可以将它交给C 函数。这里的问题是 string 超出范围,因此我在 unsafe 块中得到未定义的行为。
有没有办法让string 一直分配在堆上,直到它使用返回值为止?此外,有没有一种惯用的方法来处理这个问题,还是我需要重新设计我的算法?
【问题讨论】: