面试题答案
一键面试- 索引越界错误
- 操作场景:在
Vec
中,当使用get
方法以外的方式(如[]
运算符)访问不存在的索引位置时会出现。例如let v = vec![1, 2, 3]; let value = v[10];
,这里试图访问索引10,而Vec
长度只有3,就会导致索引越界错误。
- 操作场景:在
- 键不存在错误
- 操作场景:在
HashMap
中,使用get
方法获取一个不存在的键对应的值,返回None
,如果使用get_mut
并期望获取可修改的引用,或者使用get
后未处理None
情况直接解包值,就可能导致问题。例如let mut map = HashMap::new(); map.insert("key", 1); let value = map.get("non_existent_key").unwrap();
,这里获取不存在的键并unwrap
就会出错。
- 操作场景:在
- 内存分配错误
- 操作场景:在
Vec
不断增长时,如果系统内存不足,无法为新元素分配足够内存,就会出现此类错误。比如let mut v = Vec::new(); loop { v.push(1); }
,持续向Vec
中添加元素,当内存耗尽时就会触发内存分配错误。
- 操作场景:在
- 类型不匹配错误
- 操作场景:当向
HashMap
插入键值对时,如果键或值的类型与HashMap
定义的类型不匹配会出错。例如let mut map: HashMap<String, i32> = HashMap::new(); map.insert(123, "string");
,这里键的类型是i32
,与定义的String
不匹配。
- 操作场景:当向