Массив two
содержит пространство для 32 символьных указателей после malloc
.
Однако эти указатели неинициализированы и не указывают на допустимую выделенную память на этом этапе.
Следовательно, strcpy
, по существу, имеет пункт назначения (two[0]
), который является неизвестным, неинициализированным значением. Указатель - это значение, хранящееся в памяти. В этом случае значение является мусором.
Запись по адресу мусора с помощью strcpy
создает SEGFAULT из-за недопустимого доступа к памяти.
Чтобы решить эту проблему, убедитесь, что пункт назначения (two[0]
) указывает на допустимый доступный для записи буфер (возможно, two[0] = malloc(128 * sizeof(char))
).
В связанной заметке найдите похожую (но более безопасную) функцию strncpy
.