An access violation has many causes.,
Dereferencing a pointer that has a value under 64k is called a "pointer trap". This range of memory cannot be addressed.
Dereferencing a pointer that has a garbage value. This could be trying to access free memory. It could also be an invalid use of a pointer by treating a memory address as something it is not, for example, the bytes of a string being treated as an address.
It could also be accessing memory that is marked as NO_ACCESS. An example would be pageheap allocating a memory page directly after an allocation. This pageheap page is marked NO_ACCESS. This helps identify who is corrupting the heap by throwing an access violation immediately. Every heap allocation has a "Protect" status.