float xdiff = pos.x - v.x;
...
float newx = pos.x - (fabs(xdiff) * (1 / xdiff) * speed);
xdiff probably becomes zero when the circles converge, and newx subsequently explodes because of the division.
Why you don't get an exception I have no idea (assuming this is the problem).
Edit: Yes, this seems to be the case. Also, its seemingly common to not generate an exception on floating-point division by zero, but instead set it to a NaN-value. See
this article and
this FAQ for more information.
Finally, you could've probably found this out yourself with a little effort --- maybe printing the positions after each frame too see where they were. You'll usually get yelled at for simply posting a wall of code and expecting others to find the problem (or get no help), but I guess I was in a helping mood today.