Los literales (en especial las cadenas) son almacenados en un área de la memoria usada por la aplicación donde sólo hay acceso en modo lectura. Además, esta fuera de los segmentos de datos (DATA, HEAP, STACK) donde al programa se le permite escribir.
Compilando tu programa en GCC sobre Sistema Operativo Linux se replica el error, y usando el comando objdump -s -j .rodata <program>
, puedes obtener una salida como esta:
./test_str: file format elf64-x86-64
Contents of section .rodata:
400630 01000200 41414130 303000 ....AAA000.
Como se observa, el contenido de la cadena esta en la sección .rodata (Read-Only Data), y esta se encuentra fuera de las secciones donde se permite la escritura, como el código de la aplicación (.text). Por protección, el sistema operativo que maneja este formato de ejecución (ELF en este caso) notifica con un mensaje de "Segmentation Fault" y la terminación del programa. Este comportamiento puede variar de un compilador o formato de ejecución a otro, pero en general es este.