【发布时间】:2023-01-10 16:50:05
【问题描述】:
我是 Rust 的新手,我一直在尝试解决代码中的错误。
下面的代码编译。然而,如果我取消注释行以将数据包添加到我的缓冲区,它会抛出错误:
`interface` was mutably borrowed here in the previous iteration of the loop
如何?那时它与数据包完全无关。我以为我开始掌握引用和内存管理概念,但这让我第二次猜测一切......
let mut buffer: VecDeque<pcap::Packet> = VecDeque::with_capacity(1000);
while let Ok(packet) = interface.next_packet() {
if start_time.is_none() {
start_time = Some(Instant::now());
}
let buf_packet = packet.to_owned();
// buffer.push_back(buf_packet);
let elapsed = start_time.unwrap().elapsed();
if elapsed >= time_limit {
break;
}
}
【问题讨论】:
-
请edit你的问题并提供minimal reproducible example这个sn-p代码不是我们可以帮助你调试的东西。这可能是当前借用检查器的限制。
-
看起来
pcap::Packet有与之关联的生命周期。所以.to_owned()不会将它与原始来源分离。