It depends on the implementation of malloc. But usually yes, memory allocated at the same time is not at the same location.
The solution is to allocate a big chunk at once and place your data in the order you want it. You can use, for example placement new for the objects and indices for references.