Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C] void scambia......

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    49

    void scambia......

    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)?

  2. #2

    Re: void scambia......

    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
    codice:
    void scambia_int (int *a, int *b)
    {
      int temp;
      
      temp = *a;
      *a = *b;
      *b = temp;
    }

  3. #3
    ... nel titolo bisogna specificare anche il linguaggio utilizzato...
    questa volta lo aggiungo io

    p.s. nel regolamento è ben specificato .
    ...Terrible warlords, good warlords, and an english song

  4. #4

    Re: void scambia......

    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.