Per quotare usa il tag "quote", non "code".

Scusami hai ragione ^^
Il problema nasce nel come ho fatto la lettura, se scrivessi soltanto "ls" poi mi chiederebbe sempre di scriver input allora ho dovuto creare due return nella funzione DistinguiComando ( 2 se esiste solo una parola cioè il comando e quindi non chiama DistinguiParametri , e 1 se ci sono anche i parametri, 0 invece se non c'è neanche il comando ). Nella funzione execvp ( o anche execv ) devo comunque passargli un char* const char* oltre al const char* anche se devo passarli solo il comando. Ho capito quello che hai detto ma al livello implementativo dovrei fare così? ( sotto la parte del codice interessata )
supponendo di voler ricorrere alla execvp() per i motivi di cui sopra (sgravarsi dall'onere di costruire a mano il path dell'eseguibile), nel caso della ls la execvp dovrebbe essere richiamata con qualcosa del genere:

codice:
	char *params[] = {"ls", NULL};
        ...
	execvp("ls", params);
il primo argomento è il nome del file da eseguire (per intenderci, nella directory /bin hai un vero e proprio file con nome "ls" che è eseguibile e contiene il codice binario del comando omonimo); il fatto che tu ricorra alla funzione exec* con la p fa sì che tale file venga cercato in tutte le directory elencate nella variabile d'ambiente PATH (quindi, di norma, anche in /bin). Questo però non basta. il vettore di stringhe che segue deve contenere l'intera command line del processo, cioè l'elenco delle stringhe che scriveresti da shell per eseguire il comando (quindi il nome del programma stesso più eventuali flag): se volessi eseguire "ls -l", il codice di sopra diverrebbe:

codice:
	char *params[] = {"ls", "-l", NULL};
        ...
	execvp("ls", params);
il fatto che il primo argomento del vettore debba essere il nome stesso del file da eseguire è in realtà una convenzione, come si legge nella man page:

The execv(), execvp(), and execvpe() functions provide an array of pointers to null-terminated strings that represent the argument list available to the
new program. The first argument, by convention, should point to the filename associated with the file being executed. The array of pointers must be terminated by a NULL pointer.
rompere una convenzione è possibile? Certo, ma se poi non funziona niente non c'è di che meravigliarsi.

Detto questo, nel tuo programma devi assicurarti che il vettore di stringhe che passi alla execvp abbia sempre, come primo elemento, il nome del programma da eseguire, anche quando lo vuoi richiamare senza argomenti; devi inoltre assicurarti che sia NULL terminated. Nel tuo caso, quando si verifica la condizione "verifica == 2", "parametri" è l'indirizzo di base di un vettore di 10 puntatori a char che però non sono mai stati inizializzati (non mi pare che lo standard C++ garantisca che la memoria allocata con new sia azzerata, di default) e che quindi puntano un po' dove gli pare in memoria. Devi assicurarti che quel vettore abbia il nome del programma come primo elemento e NULL come ultimo, con tutte le eventuali opzioni nel mezzo.