Visualizzazione dei risultati da 1 a 4 su 4

Visualizzazione discussione

  1. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Per il primo post.
    No, delete serve per cancellare singoli puntatori allocati con new mentre delete[] si usa per deallocare puntatori allocati con new[]
    Es.
    codice:
       int* alfa = new int; // alloco un singolo elemento con new
       delete alfa; // cancello l'elemento con delete
    
       int* beta = new int[16]; // alloco un array con new[]
       delete[] beta; // cancello l'array con delete[]
    Fare una semplice delete su qualcosa allocato con new[] ha comportamento indefinito.
    Non centrano nulla le matrici.

    Per il secondo post.
    Funziona benissimo...
    ...finché inserisci un elemento. Se provi a inserirne più di uno, prima o poi avrai un crash.
    int vettore; è UN int e basta, NON è un array di int. Usarlo come hai fatto nel primo esempio è un grave errore.

    Puoi allocare dove e quando ti pare, non ci sono limitazioni (memoria d sistema a parte), ma se vuoi che il secondo esempio funzioni devi passare il puntatore al puntatore in modo da poter modificare ciò che è all'esterno.
    (Come avviene con le liste.)
    codice:
    void LeggiArray(int** vettore ,int r){
        cout<<"Quanti elementi si vuole inserire nel vettore?\n";
        cin>>r;
        (*vettore)=new int[r];
        for(int i=0;i<r;i++){
        cout<<"inserire l'elemento in posizione "<<i<<endl;
        cin>>*((*vettore)+i);
        }
    }
    void StampaArray(int* vettore,int r){
            for(int i=0;i<r;i++)
                cout<<*(vettore+i)<<endl;
    }
    
    int main(int argc, char** argv) {
        int *vettore,r;
        LeggiArray(&vettore,r);
        StampaArray(vettore,r);
        delete[] vettore; // non dimenticare questa.
        return 0;
    }
    Se ti sembra strano, rifletti sul fatto che se scrivi:
    codice:
    int alfa = 10;
    int* beta = &alfa;
    *beta = 20;
    e ti ritrovi con alfa che vale 20, allo stesso modo se scrivi;
    codice:
    int* alfa = nullptr;
    int** beta = &alfa;
    (*beta) = new int(30); // Attenzione! Non [30]. Con (30) do direttamente il valore al singolo elemento.
    in *alfa ti ritrovi 30. Il motivo è che (*beta) è proprio alfa.
    Ultima modifica di shodan; 25-01-2016 a 00:06
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.