rust 如果我返回一个Vec缓冲区和一个指向其内部数据的指针,那么这个指针有效吗?

cuxqih21  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(127)

我正在写一些CFFI绑定,我遇到了一个我不确定它是否有效的情况,最简单的形式是:

unsafe fn foo() -> (*const u8, Vec<u8>) {
    let buf = vec![0, 1, 2];
    (buf.as_ptr(), buf)
}

现在使用它:

fn main() {
    let (ptr, _buf) = foo();

    // pass ptr to C function...
}

在上面的例子中,ptr有效吗?因为_buf一直存在到作用域结束。

kknvjkwl

kknvjkwl1#

问题是移动Vec是否会使指向它的指针失效,答案是,还没有决定。
这是UCG issue #326
所以最好在决定之前避免这样的代码,但是不管怎样,因为很多代码依赖于这样的代码来工作,我不相信它会被决定为无效。

相关问题