You're right that it is in the load function. The seg fault occurs near the end.
previous -> next = new;
The problem occurs when you are adding the first word for a given hash index to the hashtable array. At this point, previous is still set to null. If you try to assign something to previous->next when previous = null, it seg faults.
Next, you have a problem with the following:
if(hashtable[index] == NULL)
new -> next = NULL;
hashtable[index] = NULL;
This is supposed to store the pointer to the new word in the hashtable. Instead, it doesn't do anything with hashtable[index].
free(new). This will have the effect of releasing the memory of the last word processed, effectively throwing away the last word that you processed.
Also, I noticed a lot of return statements in your code. Essentially, you will hit a return statement one way or another while processing the first word! As soon as you hit one, the function is going to return to the calling program, so you will never process more than one word, and certainly never process a whole dictionary.
This is just what I saw while looking for the seg fault, there may be other issues too.
If this answers your question, please click the check mark to accept the answer. Let's keep up on forum housekeeping. ;-)