Vettore con dimensione variabile, dubbio

di il
7 risposte

Vettore con dimensione variabile, dubbio

Non ho capito perchè in C++ non è possibile fare
int dim;
cin>>dim;
int V[dim];

7 Risposte

  • Re: Vettore con dimensione variabile, dubbio

    SI POTREBBE fare, ma e'una funzionalita' specifica del compilatore.
    Questa sintassi ha avuto alterne vicende (esisteva nel C99, alcuni compilatori la supportano, altri no,...), ma non essendo standard non poi fidarti della sua presenza tra una versione e l'altra del compilatore.

    Quello che puoi fare e' usare alloca (con la a finale) che alloca spazio sullo stack invece che nello heap. E non serve chiamare la free perche' lo spazio viene automaticamente rilasciato all'uscita della funzione.
  • Re: Vettore con dimensione variabile, dubbio

    Devi imparare a NON usare i VLA e allocare sempre con la new (nel c++)
  • Re: Vettore con dimensione variabile, dubbio

    Si ma non mi avete spiegato perchè non si può fare....la domanda era semplice, ma ci sono arrivato.
    Il c++ è un linguaggio compilato e non interpretato, quindi il codice sorgente prima viene tradotto tutto in codice macchina e poi viene eseguito, mentre in un linguaggio interpretato si traduce un'istruzione alla volta e poi la si esegue e così via. Quindi se io scrivo
    int dim;
    cin>>dim;
    int V[dim];

    in un linguaggio compilato il calcolatore tradurrà in codice macchina senza sapere quanto vale dim e dovrà allocare un array di dimensione pari al massimo numero che il tipo int può contenere, sprecando un sacco di memoria. Tale operazione viene quindi vietata.
  • Re: Vettore con dimensione variabile, dubbio

    Senza offesa, ma hai letto i POST PRECEDENTI???

    Il tuo ragionamento non ha senso!
  • Re: Vettore con dimensione variabile, dubbio

    selfmademan ha scritto:


    Si ma non mi avete spiegato perchè non si può fare....la domanda era semplice, ma ci sono arrivato.
    Complimenti per avere trovato una soluzione tanto sballata. Hai fatto da solo o te l'hanno suggerita?

    Ma che caspita dici?

    Se avessi letto

    VLA

    nella mia risposta e avessi cercato (anche solo su Wikipedia) avresti capito VERAMENTE.
  • Re: Vettore con dimensione variabile, dubbio

    Il tipo int occupa 16 bit e il numero massimo che può memorizzare in codice binario è +32767. Quindi siccome il valore di dim non è specificato, il computer dovrebbe allocare in memoria un array di 32767 caselle, dove ogni casella è un int, quindi la memoria occupata sarà di 32767*16=524272 bit che corrispondono a circa 66 Mb....ora negli anni 70 quando sono stati creati il C e il C++ esisteva un calcolatore con 66 Mb di memoria? Non credo proprio, mi sembra di ricordare che la memoria dei computer dell'epoca era sui 15 Mb. Chiaro che oggi può essere consentita vista la maggiore capacità degli hard disk.
    CHiaramente se ciò che ho detto è tutta una balla sono disposto a ritrattare ma ora non vedo altre spiegazioni.
  • Re: Vettore con dimensione variabile, dubbio

    Una enorme balla. Interi a 16 bit ?? E' da un po' di anni che sono a 32 bit e questo comunque non c'entra NULLA nel discorso VLA.

    15 M negli anni 70 ... ma che ti sei fumato ?

    Studia seriamente ... ripeto leggi cosa è un VLA.
Devi accedere o registrarti per scrivere nel forum
7 risposte