PDA

Visualizza la versione completa : [C++] Passaggio di parametro puntatore


melmar20
15-10-2008, 11:10
ciao a tutti, dunque io su questo asetto del c++ dovrei essere quasi sicuro, ma siccome ho problemi nel codice chiedo conferma.

In c++ tutti i parametri che vengono passati alle funzioni sono passati per valore.

Quindi se io passo una variabile puntatore alla funzione, questa copia il valore del puntatore in una variabile locale e poi lavora sulla variabile locale.

Il bello viene qui, dopo aver finito di trattare la variabile locale non sa cambiata anche la struttura che stata passata??

oregon
15-10-2008, 12:18
Non capisco la domanda ... precisa meglio, magari con del codice d'esempio ...

Paulin
15-10-2008, 12:25
Quale struttura?

Passando una variabile per valore causi la creazione di una copia della variabile.

Passando una variabile per indirizzo causi la creazione di una variabile puntatore che contiene l'indirizzo della variabile.

In entrambi i casi, sia la variabile che il puntatore sono locali al corpo della funzione e hanno durata automatica.

melmar20
15-10-2008, 12:58
dunque il problema sta in questo codice :



void muovi (int num,Pilapunt<int> Sor,Pilapunt<int> Aus,Pilapunt<int> Des){
if (num==1){
Des.inPila(Sor.leggiPila());
Sor.fuoriPila();
}else{
muovi (num - 1,Sor,Des,Aus);
Des.inPila(Sor.leggiPila());
Sor.fuoriPila();
muovi (num - 1,Aus,Sor,Des);
}
A=Sor;
B=Aus;
C=Des;
}


ho creato una classe Pilapunt e A,B,C sono tre pile che rappresentano i pioli della torre di hanoi.
La procedura ricorsiva dovrebbe essere giusta, ma mi viene segnalato sepre un errore di pilavuota. Non riesco a capire dove sbaglio

melmar20
15-10-2008, 13:11
allora forse ho capito dove sbaglio.

per essere sicuro che quello l'errore pongo questa domanda:

Quando si definisce una procedura ricorsiva in c++, nello stack vengono memorizzati soltanto dei valori e non l'istruzione da dove riprendere il ciclo di controllo una volta finita la ricorsione?

Stoicenko
15-10-2008, 15:16
viene memorizzato anche il punto dove ci si fermati per fare la ricorsione..

Cmq probabile che sia errata la ricorsione, quel A,B,C a che serve fuori dall'if?

Paulin
15-10-2008, 15:17
Originariamente inviato da melmar20
... ma mi viene segnalato sepre un errore di pilavuota.
Mi sembra che il tuo sia un problema di argoritmo e pertanto potrebbe anche non essere dovuto ad un uso scorretto della memoria e del ciclo di vita delle variabili.

Per esserne sicuro se fossi in te traccerei il programma tenendo sotto controllo i valori che assumono le tue variabili, in questo modo potresti capire dove e perch si genera la condizione di "pila vuota".

Loading