Bird
Raised Fist0
Rustprogramming~5 mins

Slice lifetime basics in Rust - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a slice in Rust?
A slice is a reference to a contiguous sequence of elements in a collection, like part of an array or vector. It does not own the data but borrows it.
Click to reveal answer
beginner
Why do slices have lifetimes in Rust?
Slices have lifetimes to ensure they do not outlive the data they point to. This prevents dangling references and memory errors.
Click to reveal answer
intermediate
What does the lifetime annotation &'a [T] mean for a slice?
It means the slice borrows data that lives at least as long as lifetime 'a. The slice cannot be used after the data it points to is dropped.
Click to reveal answer
intermediate
How does Rust prevent a slice from outliving its data?
Rust uses the borrow checker and lifetime annotations to check at compile time that the slice's lifetime is within the data's lifetime.
Click to reveal answer
beginner
What happens if you try to return a slice referencing a local variable?
Rust will give a compile error because the local variable is dropped when the function ends, so the slice would point to invalid memory.
Click to reveal answer
What does a slice in Rust represent?
AA mutable variable
BAn owned copy of data
CA reference to part of a collection
DA pointer to a function
Why must slices have lifetimes in Rust?
ATo allow them to own data
BTo convert them to strings
CTo make them mutable
DTo ensure they don't outlive the data they borrow
What error occurs if you return a slice to a local variable?
ACompile-time error due to lifetime mismatch
BRuntime panic
CNo error, it works fine
DMemory leak
What does &'a [T] mean in Rust?
AA slice with lifetime 'a
BAn owned array
CA mutable reference
DA function pointer
How does Rust check slice lifetimes?
ABy copying data
BUsing the borrow checker at compile time
CAt runtime with garbage collection
DIt does not check lifetimes
Explain why slices in Rust need lifetime annotations and how they help prevent errors.
Think about what happens if a slice points to data that no longer exists.
You got /4 concepts.
    Describe what happens if you try to return a slice referencing a local variable from a function.
    Consider the lifetime of local variables vs returned references.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does a slice lifetime in Rust indicate?
      fn example<'a>(slice: &'a [i32]) {}
      easy
      A. How long the slice reference is valid in the program
      B. The size of the slice in memory
      C. The number of elements in the slice
      D. The type of elements inside the slice

      Solution

      1. Step 1: Understand what a lifetime means in Rust

        Lifetimes tell Rust how long a reference is valid to prevent using invalid data.
      2. Step 2: Apply this to a slice reference

        The lifetime on a slice reference means how long the slice can be safely used.
      3. Final Answer:

        How long the slice reference is valid in the program -> Option A
      4. Quick Check:

        Slice lifetime = reference validity [OK]
      Hint: Lifetimes track reference validity duration [OK]
      Common Mistakes:
      • Confusing lifetime with size or length
      • Thinking lifetime is about element type
      • Ignoring lifetime annotations on references
      2. Which of the following is the correct syntax to declare a function that takes a slice with a lifetime parameter?
      fn process_slice(____) {}
      easy
      A. &'a [i32]
      B. &'a [i32];
      C. &[i32]
      D. &[i32]'a

      Solution

      1. Step 1: Recall lifetime syntax for references

        Lifetimes are written as &'a before the type to indicate the lifetime of the reference.
      2. Step 2: Check each option

        &'a [i32] correctly places &'a before the slice type [i32]. &[i32] misses lifetime, &'a [i32]; has an extra semicolon, &[i32]'a places lifetime incorrectly.
      3. Final Answer:

        &'a [i32] -> Option A
      4. Quick Check:

        Lifetime syntax = &'a [type] [OK]
      Hint: Lifetimes go right after & before type [OK]
      Common Mistakes:
      • Putting lifetime after the type
      • Adding extra semicolons inside parameters
      • Omitting lifetime when needed
      3. What will be the output of this Rust code?
      fn get_first<'a>(slice: &'a [i32]) -> &'a i32 {
          &slice[0]
      }
      
      fn main() {
          let numbers = vec![10, 20, 30];
          let first = get_first(&numbers);
          println!("{}", first);
      }
      medium
      A. 20
      B. 10
      C. Compilation error due to lifetime mismatch
      D. Runtime panic

      Solution

      1. Step 1: Understand the function behavior

        The function returns a reference to the first element of the slice, which is 10.
      2. Step 2: Check lifetime correctness and usage

        The lifetime 'a ensures the returned reference is valid as long as the input slice is valid. The vector lives long enough, so no error.
      3. Final Answer:

        10 -> Option B
      4. Quick Check:

        Returned first element = 10 [OK]
      Hint: Returned slice element matches first index [OK]
      Common Mistakes:
      • Thinking lifetime causes compile error here
      • Confusing element values
      • Expecting runtime panic without reason
      4. Identify the error in this Rust code snippet:
      fn invalid<'a>() -> &'a [i32] {
          let data = vec![1, 2, 3];
          &data[..]
      }
      medium
      A. Missing lifetime annotation on data
      B. Syntax error in slice syntax
      C. The function returns a reference to data that will be dropped
      D. No error, code is correct

      Solution

      1. Step 1: Analyze the function return and data lifetime

        The function returns a slice reference with lifetime 'a, but data is created inside the function and dropped when it ends.
      2. Step 2: Understand why this causes an error

        Returning a reference to local data is invalid because the data won't live long enough, causing a dangling reference.
      3. Final Answer:

        The function returns a reference to data that will be dropped -> Option C
      4. Quick Check:

        Returning local reference = error [OK]
      Hint: Never return reference to local variable [OK]
      Common Mistakes:
      • Assuming lifetime annotation fixes local data drop
      • Ignoring ownership rules
      • Thinking slice syntax is wrong
      5. Given this function that returns a slice from two input slices, which lifetime annotation is correct to ensure safety?
      fn longest_slice<'a>(x: &'a [i32], y: &'a [i32]) -> &____ [i32] {
          if x.len() > y.len() { x } else { y }
      }
      hard
      A. 'a + 'b
      B. 'b
      C. 'static
      D. 'a

      Solution

      1. Step 1: Understand the function's return lifetime

        The function returns a slice that could come from either input slice, both sharing lifetime 'a.
      2. Step 2: Use shared lifetime for safety

        The correct lifetime for the return is 'a, matching the lifetime of both input slices.
      3. Final Answer:

        'a -> Option D
      4. Quick Check:

        Return lifetime = 'a of inputs [OK]
      Hint: Return lifetime must cover both inputs [OK]
      Common Mistakes:
      • Choosing only one input lifetime
      • Using 'static without reason
      • Ignoring lifetime intersection rules
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard