¿Cómo detener las pérdidas de memoria cuando se usa `as_ptr ()`?
Como es la primera vez que aprendo programación de sistemas, me cuesta mucho entender las reglas. Ahora, me confundí con las pérdidas de memoria. Consideremos un ejemplo. Digamos, Rust está lanzando un puntero (a una cuerda) que Python atrapará.
En Rust, (solo estoy enviando el puntero delCString
)
use std::ffi::CString;
pub extern fn do_something() -> *const c_char {
CString::new(some_string).unwrap().as_ptr()
}
En Python, (estoy haciendo referencia al puntero)
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
Ahora, mi pregunta es sobre liberar la memoria. Pensé que debería liberarse en Python, pero luego aparece la propiedad. Porque,as_ptr
Parece tomar una referencia inmutable. Entonces, me confundí acerca de si debería liberar la memoria en Rust o Python(¿o ambos?). Si va a ser Rust, entonces, ¿cómo debo liberarlo cuando el flujo de control ha vuelto a Python?