codice:
for (i=1; k < c.size()-1;i=i++)
La sintassi di questo for è sbagliata (in tutti e due i for); il caso di b.size() == a.size() non è controllato; usi temp prima di assegnarle un valore.
Non so a te, ma a me il compilatore s'inchioda con un assert su temp o va in loop (una volta sistemata temp).

Poi: quando dichiari un vector fornendo le dimensioni, una push_back() accoda il valore passato come argomento a quelli già creati. Quindi se crei il vector per 9 elementi, una push_back() te ne aggiunge 1, portando size() da 9 a 10.
Se usi size() all'interno di un ciclo, c'è il forte rischio che il ciclo stesso non finisca mai.
Soluzione: non usare mai push_back() e size() in uno stesso ciclo. Puoi usare tranquillamente [] per accedere agli elementi del vector.

(Comunque bastano due cicli for per fare il merge di due vector. La tua soluzione mi pare troppo macchinosa).