// a[moved] увеличился.
tmp = a[moved];
for (i = moved+1; i < a.size() && a[i] < tmp; ++i) {
a[i-1] = a[i];
}
a[i-1] = tmp;
size
и потом проходитесь циклом до size по обеим строкам. Но ведь более короткой строки там просто нет - вы обращаетесь к не вашей памяти.