Obteniendo Falla de Segmentación

Vi muchas preguntas sobregetting fallo de segmentación en el programa C aquí en SO, y pensé que sería genial tener una referencia a aquellos aquí, una pregunta con algunos casos que están causando fallas de segmentación. Mi respuesta se publica a continuación.

omo se escribe en algunas respuestas, el comportamiento no está definido para todos los casos, aunque muchas personas los conocen comoFallo de segmentació, entonces esta pregunta es acerca de qué causa este "síntoma".

En los casos a continuación, aparece un error de segmentación cuando ejecuto el programa, ¿podría determinar por qué?

1)

char *str = "foo";
str[0] = 'b';   // << Segfault hre

2)

char str[] = "foo";
char *newStr = malloc(strlen(str));
strcpy(newStr, str);
free(newStr);   // << Segfault here

3)

char *str = malloc(4 * sizeof(char));
str = "foo";
free(str);      // << Segfault here

4)

char *str = malloc(4 * sizeof(char));
strcpy(str, "foo");
free(str);
if (str != NULL)
    free(str);      // << Segfault here

5)

char *str = "something and then foo";
printf("%s", str[19]);    // << Segfault here

6)

typedef struct {
    char *str;
}st;
...
st *s;
s = malloc(sizeof(st));
s->str = malloc(5);
free(s);
free(s->str);    // << Segfault here

Respuestas a la pregunta(5)

Su respuesta a la pregunta