Borrow Errors
As a concrete example of how these borrowing rules prevent memory errors, consider the case of modifying a collection while there are references to its elements:
1. ```
fn main() {
```
2. ```
let mut vec = vec![1, 2, 3, 4, 5];
```
3. ```
let elem = &vec[2];
```
4. ```
vec.push(6);
```
5. ```
println!("{elem}");
```
6. ```
}
```
Similarly, consider the case of iterator invalidation:
1. ```
fn main() {
```
2. ```
let mut vec = vec![1, 2, 3, 4, 5];
```
3. ```
for elem in &vec {
```
4. ```
vec.push(elem * 2);
```
5. ```
}
```
6. ```
}
```
This slide should take about 3 minutes.
- In both of these cases, modifying the collection by pushing new elements into it can potentially invalidate existing references to the collection’s elements if the collection has to reallocate.
