Data Structure of Pointers to Interface Objects

I don’t think the issue is the 2D arrays.
You get a compile error where you CALL RegisterCreep, so your type before that doesn’t seem to be correct!
Why don’t you post how you are calling RegisterCreep() and also, do try to cast it using Cast< IICreepBasic>()

Your TMap should work fine as long as you are actually creating an empty array the first time you add a new KEY.
So, actually, you should use
AvailableFills->FindOrAdd(CreepType)->Add(TheCreep) on AvailableFills instead of accessing it like:
(AvailibleFills[CreepType])->Add(TheCreep);