Running this through `debug50` with a 143,091 word dictionary and a 19,190 word text would be....pick a word.....daunting. Try debugging with a one word file used as dictionary and text (something like `./speller word.txt word.txt`). 

Put a break point at `check`. Add a watch expression for `word_copy[i]` and step through. 

Or study this code carefully to figure out why word_copy is never populated correctly:

    for ( int i = 0; i < length; i++)
        {
           if (isupper(word_copy[i]))
            {   
                word_copy[i] = tolower(word_copy[i]);
            }
    
            else
            {
                word_copy[i] = word_copy[i];
            }
        }