Как остановить утечки памяти при использовании `as_ptr ()`?
Так как я впервые изучаю программирование систем, мне трудно обдумать правила. Теперь я запутался в утечках памяти. Давайте рассмотрим пример. Скажем, Rust бросает указатель (на строку), который Python собирается поймать.
В Rust, (я просто отправляю указательCString
)
use std::ffi::CString;
pub extern fn do_something() -> *const c_char {
CString::new(some_string).unwrap().as_ptr()
}
В Python (разыменование указателя)
def call_rust():
lib = ctypes.cdll.LoadLibrary(rustLib)
lib.do_something.restype = ctypes.c_void_p
c_pointer = lib.do_something()
some_string = ctypes.c_char_p(c_pointer).value
Теперь мой вопрос об освобождении памяти. Я думал, что это должно быть освобождено в Python, но потом появляется право собственности. Потому что,as_ptr
кажется, взять неизменную ссылку. Итак, я запутался, стоит ли мне освобождать память в Rust или Python(или оба?), Если это будет Rust, то как мне освободить его, когда поток управления вернется в Python?