As @computerequip says, int temp[] = {3,x,y,z}; is storage allocated on the stack during the call to v3f::v3f(int x, int y, int z), and is released when it returns, and reused by subsequent calls to other functions. Meanwhile int* data; is pointing into this area, which will have anything from return addresses, register saves, and other automatic variables. So you _should_ see garbage.
Maybe, depending what you're trying to do, you should declare it as int data[4]; within the class, and initialise it in the constructor.