You are giving sizeof() a pointer type variable, so it gives you the size of a pointer in the 2 first cases.
In the third case, you are giving it a float, and a float is generally 32 bits too.
Can't you keep the allocated size in a variable somewhere?
Use the vector class. It automatically allocates and deallocates the memory it uses, so you don't need to manually do it yourself with new[] and delete[]. Also it keeps track of its own .size().
At its core it's just a dynamically allocated C array. That's why you can use &myVector[0] or &myVector.front() (which both return the address of the start of the dynamic array) and OpenGL will never see the difference.