Prime games heap-allocate their game objects, assets, etc. When you start the game, these objects (think C++ object not game object) all line up contiguously in heap. As you play the game, some object are no longer needed and therefore are freed, leaving gaps. Others are needed on-demand and therefore allocated. The size of allocations varies greatly so after some time the heap no longer becomes contiguous. This is called heap fragmentation. It explains that there is a difference between the statements "there is not enough bytes free for this object" and "there is nowhere to fit this object". The latter is what creates a heap allocation failure.
It's because you can have two game sessions with the exact same objects loaded, but one will crash because those objects are more fragmented, and heap allocations can happen hundreds of times