What is the "array" that's on the stack, if the data is on the free store?

What exactly is the difference, in terms of where pointers are stored, between an array allocated dynamically and an array whose members are individually allocated? It would seem to me that it's this:

In the first method the 1 pointer on the stack points directly to the first member of an array on the free store and that's it.

In the second method there is a pointer on the stack for each member of the array. So if 500 objects are on the free store, there are 500 pointers to objects pointing to them on the stack (this is what I've done).


Correct?