CurrentActor is safe because for loop itself guarded it once from de-reference with invalid index.
Casting on CurrentActor is also safe because casting on nullptr will get nullptr.
However, CharacterToLaunch may fail because not all AActors are ACharacters. In which case some of it would be nullptr. Then attempt to call a function that belongs to ACharacters from non-ACharacters, will crash for sure.
Highly recommended to install editor symbols on the engine as well, so whenever the code crash, it will tell you exact line it crashed. In addition, use DebugGameEditor build for tracking variable values. DevelopmentGameEditor sometimes hides pointer information away, and some code will never breakpoint. If you open up using .uproject, it is default using DevelopmentGameEditor build.