Okay, I'm sorry for dumping alot of code on you guys... but I'm at wit's end about this.

I'm writing a 2D Space Shooter, in SDL. But that's not the problem. It has nothing to do with the SDL API.

Everything works perfectly, my little ship rotates fine, moves perfectly, except under strange circumstances. When I start up the game, and start rotating to the right and moving immediately forward, after about a half a second, the ship's x and y values both jump to -2147483648, and moving does nothing to change those values. Even saying x = 0 doesn't do it.

Vectoring conversions just use basic trig, they're not the problem.

Code:
void Object::ForceAct(double degrees, double power)
{
	VECTORSTRUCT vector;
	VECTORSTRUCT newvector;
	vector.degrees = direction;
	vector.power = speed;
	newvector.degrees = degrees;
	newvector.power = power;
	DegreesToVector(&vector);
	DegreesToVector(&newvector);
	vector.x += newvector.x;
	vector.y += newvector.y;
	VectorToDegrees(&vector);
	speed = vector.power;
	if (speed > maxspeed)
		speed = maxspeed;
	direction = vector.degrees;
}

void Object::RotateAct(int degrees)
{
	rotation += degrees;
	if (rotation > 359)
		rotation -= 360;
	if (rotation < 0)
		rotation += 360;
}

void Object::MoveObject()
{
	VECTORSTRUCT vector;
	vector.degrees = direction;
	vector.power = speed;
	DegreesToVector(&vector);
	x += vector.x;
	y += vector.y;
}

void StateObject::Step(SDL_Surface* buffer)
{
	int count;
        DetectKeyStrokes();
	for (count = 0; count < SCREEN_WIDTH*SCREEN_HEIGHT; count++)
    	((unsigned int*)screen->pixels)[count] = RGB(0,0,0);
	for (count = 0; count < MAX_SHIPS; count++){
		if (ShipPointers[count] == NULL)
			break;
		else{
			ShipPointers[count]->MoveObject();
			ShipPointers[count]->DrawObject(buffer);
		}
	}
}

void StateObject::DetectKeyStrokes()
{
if (GetAsyncKeyState(KEY_RIGHT))
    	CurrentStateObject->ShipPointers[PlayerNumber]->RotateAct(5);
    if (GetAsyncKeyState(KEY_LEFT))
    	CurrentStateObject->ShipPointers[PlayerNumber]->RotateAct(-5);
    if (GetAsyncKeyState(KEY_UP))
    	CurrentStateObject->ShipPointers[PlayerNumber]->ForceAct(CurrentStateObject->ShipPointers[PlayerNumber]->rotation,CurrentStateObject->ShipPointers[PlayerNumber]->thrust);
    if (GetAsyncKeyState(KEY_DOWN))
    	CurrentStateObject->ShipPointers[PlayerNumber]->speed = 0;
}
Now... that's everything that has any relevance with moving. Can anyone find any fault with it, and why it might do that?