Rust 如何销毁范围内的引用?

Rust 如何销毁范围内的引用?,rust,Rust,我所要做的就是通过迭代将一个向量复制到另一个向量。我收到错误借来的值寿命不够长。我明白为什么我会看到这个,那是因为无效的内存引用不能存在于范围之外。我的问题是,在使用引用之后,如何在范围内销毁它 fn main() { let x: Vec<&str> = vec!["a","b","c","d"]; let mut y: Vec<&str> = vec![];

我所要做的就是通过迭代将一个向量复制到另一个向量。我收到错误
借来的值寿命不够长
。我明白为什么我会看到这个,那是因为无效的内存引用不能存在于范围之外。我的问题是,在使用引用之后,如何在范围内销毁它

fn main() {
    let x: Vec<&str> = vec!["a","b","c","d"];
    let mut y: Vec<&str> = vec![];
    let z: String = String::from("xy");
    let p: &String = &z;

    for i in x {
        let k = [i, p].concat();
        let q: &str = &k;
        y.push(q);
    }

    println!("{:?}",y);
}
fn main(){
设x:Vec=Vec![“a”、“b”、“c”、“d”];
让mut y:Vec=Vec![];
设z:String=String::from(“xy”);
设p:&String=&z;
对于x中的i{
设k=[i,p].concat();
设q:&str=&k;
y、 推(q);
}
println!(“{:?}”,y);
}

我想为
mut y
保留
Vec
。我不想将其更改为
Vec
,尽管这是可能的,因为我想将其保留在堆栈上,而不是堆上。这可能吗?

k
将在堆上分配,无论您如何定义Vec,问题在于
k
的范围

for i in x {
    let k = [i, p].concat();
    let q: &str = &k;
    y.push(q);
} // <- k goes out of scope at the end of each iteration.
x中i的
{
设k=[i,p].concat();
设q:&str=&k;
y、 推(q);

}//
k
在堆上得到分配,无论您如何定义Vec,问题在于
k
的范围

for i in x {
    let k = [i, p].concat();
    let q: &str = &k;
    y.push(q);
} // <- k goes out of scope at the end of each iteration.
x中i的
{
设k=[i,p].concat();
设q:&str=&k;
y、 推(q);

}//您试图保存对堆栈变量k的引用,但k在每个循环结束时都会被销毁。这就是它所抱怨的。“因为我想把它放在堆栈上,而不是堆上”:我看不出
Vec
如何确保这一点。每个
&str
都可以指向任何地方:堆栈、堆、常量……谢谢大家!我理解错了。您试图保存对堆栈变量k的引用,但k在每个循环结束时都会被销毁。这就是它所抱怨的。“因为我想把它放在堆栈上,而不是堆上”:我看不出
Vec
如何确保这一点。每个
&str
都可以指向任何地方:堆栈、堆、常量……谢谢大家!我明白我错了什么。