Как остановить утечки памяти при использовании `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?

Ответы на вопрос(1)

Ваш ответ на вопрос