Hello Songe08!
AGameModeBase::HandleStartingNewPlayer | Unreal Engine Documentation
According to the documentation, HandleStartingNewPlayer is to signal the game instance that a new player is ready to enter the game. I get that you want to store a reference to the newly joined player’s PlayerController in your Player Controller array. But why are you running a for each loop on the Player Controllers array, every single time a new player joins? What you would want to do is, just spawn a new pawn for the newly joined player’s PlayerController and then make it posses that pawn. Not spawn a Pawn again and again (every time a new player joins) for every single player out there and then have them possess it.
As far as I understand, your problem stems from this fact.