저는 FFI 라이브러리에서 일하고 있는데이 패턴을 꽤 많이 사용하여 관용적으로 다루는 방법을 모릅니다. 내 의도녹슬림, 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());
}
}
}
내가 C 함수에 넘겨 수있는 메모리의 조각에 const *void
포인터를 만드는 것이 었습니다. 문제는 여기서 string
이 범위를 벗어나서 unsafe
블록에서 정의되지 않은 동작을 얻습니다.
string
을 힙에 할당 할 수있는 방법이 있습니까? 반환 값을 사용하는 것이 무엇이든지간에이 힙을 할당 할 수 있습니까? 또한이를 처리하는 관용적 인 방법이 있습니까? 아니면 알고리즘을 다시 디자인해야합니까?
http://jakegoulding.com/rust-ffi-omnibus/ – Shepmaster