Вы должны убедиться, что вы выделили не только массив указателей, но и место для каждого из ваших элементов. Я не проверяю NULL-указатели, как вы должны, но это должно помочь вам начать.
char **arr;
int maxWords = 3;
int i;
arr = malloc (sizeof (char *) * maxWords);
for (i = 0; i < maxWords; i++)
{
arr[i] = malloc (100);
fgets (arr[i], 99, stdin);
}
потом вам тоже нужно освободить эту память:
for (i = 0; i < maxWords; i++)
{
free (arr[i])
}
free (arr);