I am aware of -1 as a key. Which would indeed avoid the ScreenMessages.Find(Key); line of code.
But my question isn’t “is there a way around this?”.
My question is “why does a valid int32 cause an access violation?”
Because the FScreenMessageString* pointer is null. It can’t find that message in the Map (or whatever data structure is used for the messages), so whatever is happening after that is probably operating on a nullptr.