Why does this script crash Unity?

I can’t figure it out. Sometimes itt crashes, sometimes it doesn’t. It doesn’t seem to relate to how many WordDisplays I have active, how the rate at which I spawn them, etc. I don’t get any error messages on account of Unity freezing, so I can’t figure it out.

{
    private static string[] wordArray = {"floor","treaty","giant","lifestyle","reasonable","stream","shelf","medal","register","cereal","stage",
    "command","please", "separate",
    "intervention","rung","hover","fountain","cotton","attention","adoption",
    "leftovers","publish","inn","moment","eagle","mastermind", "sector","clinic", "trend", "jockey", "vegetable", "category", "upset", "rebel","progressive",
    "manner", "reporter", "zebra", "waterway",
    "wetworks", "window", "welfare", "all-star", "allegory", "beetle", "pungeant", "pageant", "peacock", "rubbish", "kerfuffle"};

    public static List<string> wordList = new List<string>();
    public static List<char> activeCharList = new List<char>();
    static WordDisplay[] wordDisplays;

    void Awake()
    {
        foreach (string word in wordArray)
        {
            wordList.Add(word);
        }
    }

    private void Update()
    {
        print(wordList.Count);
    }

    public static string GetRandomWord()
    {
        if (wordList.Count <= 3)
        {
            foreach (string word in wordArray)
            {
                wordList.Add(word);
            }
        }
        
        wordDisplays = FindObjectsOfType<WordDisplay>(); //get all active word displays
        foreach (WordDisplay wordDisplay in wordDisplays) //then get all first characters of those wordsdisplays
        {
            activeCharList.Add(wordDisplay.textMeshPro.text[0]);
        }

        int randomIndex = Random.Range(0, wordList.Count);
        string randomWord = wordList[randomIndex];

        while (activeCharList.Contains(randomWord[0]))
        {
            randomIndex = Random.Range(0, wordList.Count);
            randomWord = wordList[randomIndex];
        }

        wordList.Remove(randomWord);
        return randomWord;

    }

}

if you ever have a programm freezing you should always take a look at the lastly added while loops.
Especially in your case if you report that it “sometimes” happens and you have a “random” in your loop?
I do not really understand what you try to accomplish when only comparing the first letters of your words but you shoudl defnitly find a better solution here that does not contain an endless loop until you perhaps find the correct word.

I figured out the issue: I was never removing the chars from activeCharList, so eventually, the activecharList would have all possible letters and the while loop would never be able to return a value.

Thanks everyone!