MST
星途 面试题库

面试题:Rust中panic!宏错误信息解读之常见错误

在Rust代码中,使用`panic!`宏后出现错误信息`index out of bounds: the len is 5 but the index is 7`,请解释这个错误产生的原因,并说明如何避免这种错误。
45.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

错误产生原因

这个错误表示在Rust代码中,你尝试访问一个长度为5的集合(如数组、向量等),但使用的索引是7 。在Rust中,集合的索引是从0开始的,所以合法的索引范围是0到集合长度减1。这里集合长度为5,合法索引范围是0到4。使用panic!宏后出现此错误,意味着代码中存在对集合越界访问的操作。

避免这种错误的方法

  1. 边界检查:在访问集合元素前,手动检查索引是否在合法范围内。例如,对于向量vec
let vec = vec![1, 2, 3, 4, 5];
let index = 7;
if index < vec.len() {
    let value = vec[index];
    println!("The value at index {} is {}", index, value);
} else {
    println!("Index out of bounds");
}
  1. 使用get方法:许多集合类型(如Vec)提供了get方法,它不会导致panic,而是在索引越界时返回None
let vec = vec![1, 2, 3, 4, 5];
let index = 7;
if let Some(value) = vec.get(index) {
    println!("The value at index {} is {}", index, value);
} else {
    println!("Index out of bounds");
}
  1. 迭代器:如果只是遍历集合,尽量使用迭代器而不是索引访问。迭代器会自动处理边界问题,不会出现越界情况。
let vec = vec![1, 2, 3, 4, 5];
for value in vec.iter() {
    println!("{}", value);
}