【发布时间】:2015-09-14 00:00:45
【问题描述】:
由于这是我第一次学习系统编程,我很难理解规则。现在,我对内存泄漏感到困惑。让我们考虑一个例子。比如说,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 时我应该如何释放它?
【问题讨论】:
-
请注意,在这种情况下,没有内存泄漏。相反,它是一个释放后使用错误,通常更具破坏性。
标签: python memory-leaks rust ctypes ffi