MST

星途 面试题库

面试题:Rust中panic!宏在错误处理流程中的角色与常规使用场景

请阐述Rust中panic!宏在整个错误处理流程里扮演什么样的角色?并举例说明至少两个常见的使用场景。
23.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. panic!宏在错误处理流程中的角色
    • 不可恢复错误处理:在Rust中,panic!宏用于指示程序遇到了不可恢复的错误。当panic!宏被调用时,它会打印错误信息,并开始展开(unwinding)栈,这意味着函数调用会逐步回退,清理局部变量等资源。如果没有catch_unwind机制(在一些特定场景下使用),最终程序会终止。它与Result类型所处理的可恢复错误不同,Result允许程序在遇到错误时选择继续执行不同的逻辑分支,而panic!表示程序当前状态已无法正常继续运行。
  2. 常见使用场景
    • 索引越界
      fn main() {
          let vec = vec![1, 2, 3];
          let element = vec[10]; // 这里会触发panic!,因为索引10超出了vec的有效范围
          println!("The element is: {}", element);
      }
      
    • 空指针解引用
      fn main() {
          let ptr: *const i32 = std::ptr::null();
          let value = unsafe { *ptr }; // 尝试解引用空指针,会触发panic!
          println!("The value is: {}", value);
      }