PDA

Visualizza la versione completa : [C] void scambia......


sambac
14-04-2004, 10:23
Devo realizare la classica funzione che scambia il comntenuto di due variabili.
Il problema è che questa due variabili sono due puntatori a strutture create tramite la new.
Vorrei sapere se la seguente implememtazione è corretta cioè non si hanno problemi quando ad esempio vado a fare la delete.

struct evento{..........};

typedef evento* puntEvento;

void scambia(puntEvento& a,puntEvento& b)
{
puntEvento c=a;
a=b;
b=c;
}

se faccio "delete a;" sono sicuro che mi viene cancellato l'oggetto puntato da a dopo scambia e non quello puntato al momento della creazione? Cioè, se faccio:

a=new evento;
b=new evento;
scambia(a,b);
delete a;

mi viene cancellato il nuovo oggetto puntato da a oppure quello vecchio (cioè quello che dopo la scambia è puntato da b)?

cicciox80
14-04-2004, 10:43
Originariamente inviato da sambac
Devo realizare la classica funzione che scambia il comntenuto di due variabili.
Il problema è che questa due variabili sono due puntatori a strutture create tramite la new.
Vorrei sapere se la seguente implememtazione è corretta cioè non si hanno problemi quando ad esempio vado a fare la delete.

struct evento{..........};

typedef evento* puntEvento;

void scambia(puntEvento& a,puntEvento& b)
{
puntEvento c=a;
a=b;
b=c;
}

se faccio "delete a;" sono sicuro che mi viene cancellato l'oggetto puntato da a dopo scambia e non quello puntato al momento della creazione? Cioè, se faccio:

a=new evento;
b=new evento;
scambia(a,b);
delete a;

mi viene cancellato il nuovo oggetto puntato da a oppure quello vecchio (cioè quello che dopo la scambia è puntato da b)?

Devi passare i due parametri a e b per indirizzo e non per valore; l'unico modo che conosco per copiare un valore di una struttura è quello di copiare tutti i valori di quella struttura.

Ti faccio l'esempio più semplice dello scambio tra due interi


void scambia_int (int *a, int *b)
{
int temp;

temp = *a;
*a = *b;
*b = temp;
}

Johnny_Depp
14-04-2004, 12:02
... nel titolo bisogna specificare anche il linguaggio utilizzato...
questa volta lo aggiungo io ;)

p.s. nel regolamento è ben specificato (http://forum.html.it/forum/showthread.php?s=&threadid=588640) .

Michele Facchin
14-04-2004, 15:44
Originariamente inviato da sambac
mi viene cancellato il nuovo oggetto puntato da a oppure quello vecchio (cioè quello che dopo la scambia è puntato da b)?


Se leggo bene, dovrebbe cancellarti il nuovo oggetto puntato da a, quindi quello che prima era b.
Visto che la funzione, mi sembra avere tutti i parametri corretti.

Loading