По крайней мере, одна проблема.
Неправильный расчет размера.
char **input_words_tokenized =
malloc((wordCount(input_words))*sizeof(char));
// wrong type ^--^
Вместо определения размера, который, как мы надеемся, соответствует типу, размер к указанному типу. Проще кодировать правильно, просматривать и поддерживать.
char **input_words_tokenized =
malloc((wordCount(input_words)) * sizeof *input_words_tokenized);
// ^--------------------^