Fallo de segmentación al intentar modificar una cadena

Este código me está dando una falla de segmentación en tiempo de ejecución.

char *str = "HELLO"; str[0] = str[2]; 

Por favor, ¿alguien puede decirme por qué?

Estándar no permite modificar una cadena literal. La cadena se almacena en un segmento de solo lectura del progtwig, por ejemplo, en Linux, se almacena en la sección .rodata del ejecutable que no se puede escribir.

No puedes modificar el contenido de una cadena literal. Póngalo en una matriz de caracteres si desea poder hacerlo.

 char str[] = "HELLO"; str[0] = str[2]; 

Se está produciendo una falla de seguridad porque el comstackdor ha colocado la constante de cadena “HOLA” en la memoria de solo lectura, y el bash de modificar la cadena está fallando.

Esto se comstack a una cadena literal en la sección de solo lectura.

  .section .rodata .LC0: .string "HELLO"