Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [c++] Operatore Delete

  1. #1
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    33

    [c++] Operatore Delete

    Se ho il seguente programma

    int main(){
    int* p= new int;
    *p = 10;
    delete p; // ok marca come libera la zona usata da p e la rende
    // riallocabile

    delete p //ERRORE

    }

    perchè c'è errore se faccio la seconda delete? forse perchè mi rende libera una zona già libera e per questo la zona puo essere puntata da due puntatori?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    Provo a risponderti io:
    new e delete consentono l'allocazione dinamica della memoria.
    Una volta che crei il puntatore ad interi con new, deallochi la memoria occupata con delete, il ciclo vitale del puntatore p è terminato. Un'ulteriore tentativo di 'deletarlo' viene segnalato dal compilatore.

    Ciao.
    Slack? Smack!

  3. #3
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    33
    si ma perchè ho un errore ?in che cosa consiste questo errore? inoltre l'errore è segnalato a compile time o a run time?



  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    codice:
    //prova.cpp
    
    int main()
    {
            int* p = new int;
            *p = 10;
            delete p;
            delete p;
            return 0;
    }
    Non ho ottenuto alcun errore sia in fase di compilazione che di esecuzione. Mi sarei aspettato una segnalazione dal compilatore.
    Slack? Smack!

  5. #5
    Lo hai capito da solo.

    Tu la seconda volta deallochi una cosa non allocata.

    forse perchè mi rende libera una zona già libera e per questo la zona puo essere puntata da due puntatori?
    codice:
    int main (void) {
      int *p, *p2;
      p = new int; 
      p2 = p;
      *p = 10;
      delete p2;
      return (0); 
    }
    E' la stessa cosa..con due puntatori.

  6. #6
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    33
    quindi l'errore sta nel fatto che derallocouna cosa che non ho allocato. ok



    grazie mad

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    Riporto ancora una cosa:
    [code]
    g++ -o prova.o prova.cpp
    nessun errore, neanche in esecuzione.

    gcc -o prova.o prova.cpp
    /tmp/cco0iFc7.o(.text+0x16): In function `main':
    : undefined reference to `operator new(unsigned)'
    /tmp/cco0iFc7.o(.text+0x30): In function `main':
    : undefined reference to `operator delete(void*)'
    /tmp/cco0iFc7.o(.text+0x3e): In function `main':
    : undefined reference to `operator delete(void*)'
    /tmp/cco0iFc7.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
    collect2: ld returned 1 exit status
    [code]



    Sto C più più mi spacca in 2 la testa.
    Slack? Smack!

  8. #8
    gcc usa il linker del C
    mentre g++ passa al linker anche le librerie standard C++

    prima bastava inserire l'opzione al linker -lstdcxx
    e funzionava, ora con la versione 3 non va più.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    In effetti uso gcc3.2.3, ma il vero problema per me è seguire le indicazioni di un testo, poi arrivare a mettere le mani sulla tastiera e ritrovarsi in un mare di errori e/o risultati inaspettati (come quello di cui sopra).

    Grazie per le indicazioni, ciao.
    Slack? Smack!

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.