No, but there is with the way you allocated them. When you call malloc you are simply asking for a memory space big enough to hold a servo object, this is not what is required, what you actually want to ask for is a 'new' servo object, this will create the space and call any constructor code required to initialise the space. Funnily enough, the command to do this is called 'new'.
If you know how many servos you need, just declare them the array way. You probably dont need the speed in your struct as you can use servo.readMicroseconds to get the current speed. Finally you can use C++ so you could use a class inplace of the struct, you could possibly just create a derived servo class which includes whatever it was that you wanted to store in your struct.
DuaneB:
Funnily enough, the command to do this is called 'new'.
When you attempt to use new, you're going to find that it doesn't exist in the current avr-libc/Arduino environment.
This is actually intentional.
Why? Well, basically because dynamic memory allocation on extremely memory limited environments such as these 8 bit AVR micros is generally just a bad idea. So don't do it. Just stick to statically allocated objects.