The previous repo implementation did not require you to ever malloc a wordEntry because they were all statically allocated in the array. (You did have to transform an element into a pointer to the element.) Our array held lots of wordEntry objects that are not used. If these were big objects, we might not be happy about that. Let's implement it again, but this time the repo will be represented by an array of pointers to wordEntry. For example,
struct *wordEntry words[1000];
You can allocate them on addWord using something like
words[i] = malloc(sizeof(struct wordentry));
You should not change words.h at all, nor dict.c. Call this implementation repop.c. When you compile you specify the implementation that you want.