Я видел много вопросов о получении ошибки сегментации в программе C здесь, в SO, и я подумал, что было бы здорово иметь ссылку на них здесь, вопрос с некоторыми случаями, вызывающими ошибку сегментации, Мой ответ опубликован ниже.
Как написано в некоторых ответах, поведение undefined для всех случаев, хотя многие люди встречают их как ошибка сегментации, поэтому этот вопрос касается того, что вызывает это "Симптом".
В приведенных ниже случаях я получаю ошибку сегментации при запуске программы, не могли бы вы определить, почему?
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