This page builds every word and symbol the parent note leaned on. If a term in the parent felt like it appeared from nowhere, it is defined here from the ground up. Read top to bottom — each idea is a brick the next one stands on.
Why the topic needs this: almost every UB in the parent ("out of bounds", "use-after-free", "dangling pointer") is about touching a mailbox you were not allowed to touch. You cannot understand "out of bounds" without first seeing the street of mailboxes and where your fenced-off region begins and ends.
Why the topic needs this: the parent's Example 3 (return &local;) is entirely about lifetime. The boxes are fine — the number 42 might still be sitting there — but they no longer belong to local. Reading them is UB precisely because the lifetime ended, not because the memory vanished.
Everything in Category 1 of the parent uses pointers, so we earn every pointer symbol now. See Pointers and Memory in C for the full topic.
Why these two and not something else: & is how you make a pointer (you need a house number to store), and * is how you use it (a house number is useless until you actually walk there). The parent's phrase "dereferencing a null pointer" literally means: doing *p when p holds a forbidden address.
Why the topic needs this: the parent's Example 4 reads a[3] from a size-3 array. Look at the figure — index 3 steps past the fence into a box that belongs to something else. That step is out of bounds, and reading or writing it is UB. The valid range is 0 to n−1; the box "one past the end" may be pointed at but never opened.
The parent's Category 2 (arithmetic UB) needs you to know how numbers are stored. Full topic: Integer Types and Overflow.
Why the topic needs this: the parent's Example 1 deletes an overflow check because signed overflow is UB. The compiler is allowed to assume "this never happens". If overflow were merely "wrap-around" (as it is for unsigned), the check would survive. The whole example hinges on this asymmetry.
Why the topic needs this: this single rule is the reason UB "poisons the whole program" (parent's mistake #2). The compiler reasons backwards and forwards from an impossible-by-assumption path, so a UB on line 50 can silently erase a check on line 10. Every worked example in the parent is a consequence of this one line.