strcat () предполагает, что назначение является допустимой строкой, поэтому сделайте это, добавив
*results[0] = '\0';
перед тем, как сделать strcat ()
Или попробуйте сделать следующее:
strcpy(*results, get_string_1());
strcat(*results, get_string_2());
Наконец, что именно происходит в этой строке:
*results = malloc(sizeof(char) * (dir_length + file_length));
Убедитесь, что вы выделяете достаточно места для результатов. В идеале это должно быть:
*results = malloc(sizeof(char) * (s1_length+s2_length+1));
для выделения достаточного пространства под s1 и s2, за которым следует завершающий символ '\ 0'.