Skip to content

G.TYP.SLC.02 应保证数组索引在有效范围内

【级别】 要求

【描述】

RUST 的数组/切片越界访问不会出现内存被越界读写的后果,但会导致 panic。使用索引访问数组的时 候需要保证索引值在有效范围。

建议:

  • 如果基于单个索引获取数组元素,需提前校验索引有效;或者使用 get 方法,越界时返回 None 。
  • 如果需要获取一个切片,需要保证切片的起始索引地址在有效范围内,否则会导致 panic

【反例】

Rust
fn main() {
  let arr = [1, 2, 3, 4, 5];
  // 不符合:越界访问
  let _ = arr[5]; 
}

【正例】

Rust
fn main() {
  fn get_index() -> usize {
    5
  }

let arr = [1, 2, 3, 4, 5]; let index = get_index();
// 符合:校验索引是否越界
if index >= arr.len() {
    // 错误处理示例,此处产品应根据业务场景,选择合适的处理方式
    panic!("index out of bounds"); 
  }

  let _ = arr[index]; 
}