Se nella for seguente aggiungi la riga in grassetto

codice:
  for(int u=k;u<duen-1;u++)
  {
    cout << u+1 << " in " << u << endl;
    v1[u]=v1[u+1];
  }
vedrai che viene visualizzato

8 in 7

che vuol dire che viene leggo l'elemento 8 di v1 che non esiste (probabilmente il programma accede ad una zona di memoria che sta a zero ... ) ...

Il motivo lo devi trovare tu ... probabilmente dovrai capire perche' il valore finale della for va oltre quello che pensi tu ...