Allocazione di array dinamici

di il
4 risposte

Allocazione di array dinamici

Ciao a tutti.
Ho un problema più teorico che pratico, che spero possiate aiutarmi a chiarire.
Studiando gli array dinamici, ho trovato su alcuni testi (sia cartacei, sia on-line) che per allocare un array dinamico ci sono due modalità:
int *iArray = new int[dim];
int iArray[] = new int[dim];
tuttavia, il compilatore che uso (Dev-cpp) non accetta la seconda. L'errore segnalato è:
initializer fails to determine size of `iArray'
invalid initializer


Mi sapreste spiegare, innanzitutto, per quale motivo trovo scritto che si può fare e invece non è così. In secondo luogo, vorrei capire se e come posso allocare un array dichiarato in questa forma:
int iArray[]; 
Grazie della disponibilità,
Annika

4 Risposte

  • Re: Allocazione di array dinamici

    In quali testi hai letto questo

    int iArray[] = new int[dim];

    ?

    Non puoi ... se non indichi nulla tra parentesi puoi scrivere, ad esempio

    int iArray[] = {1, 2, 3, 4, 5};
  • Re: Allocazione di array dinamici

    Ho le dispense di un professore, un libro, un paio di link che lo dicono (...non so se posso pubblicarli)... immagino siano poco affidabili, però ho ancora qualcosa che non riesco a capire.

    Il dubbio che ho posto, in realtà, nasce da una questione più articolata relativa alla OOP, che io pensavo di ricondurre ad un semplice problema di dichiarazione, ma deduco che non sia così.
    Provo a spiegarmi.
    Supponi di avere una classe che ha tra gli attributi un array dinamico. Se io dichiaro l'attributo in questo modo:
    int iArray[];
    Non mi viene segnalato alcun errore. Perchè?

    Ho fatto questa classe "useless" solo per testare la questione:
    class c{
    	private:
    		int iArray[];
    		int dim;
    	public:
    		c(){ dim=0; }
    		c(int num){ dim=1; iArray[0]=num; }
                    void print(){ cout<<iArray[0]<<endl; }
                    int getdim(){ return dim; }
    };
    
    il codice viene tranquillamente compilato ma, quando lo vado ad eseguire (con un main ad hoc), sballa: la dimensione rimane 0 e nell'array ho un valore a casaccio.

    Quindi, ne ho dedotto (forse è qui che sbaglio?), che l'array deve essere allocato, ma se aggiungo l'istruzione:
    class c{
    	private:
    		int iArray[];
    		int dim;
    	public:
    		c(){ dim=0; }
    		c(int num){ dim=1; iArray=new int[dim]; iArray[0]=num; }
                    void print(){ cout<<iArray[0]<<endl; }
                    int getdim(){ return dim; }
    };
    ho errore di compilazione:
    incompatible types in assignment of `int*' to `int[0u]'

    Che significa? Che sto cercando di piazzare un valore in un puntatore? Quindi l'array non è dinamico?

    Boh, ne uscirò pazza...

    Grazie della pazienza!
    Annika
  • Re: Allocazione di array dinamici

    Compilando con VisualC++, come mi pare corretto, ottengo

    Error 2 error C2229: class 'c' has an illegal zero-sized array

    Come ti ho detto prima, quello che devi usare è un puntatore e quindi

    int *iArray;
  • Re: Allocazione di array dinamici

    No, stai facendo una dichiarazione "impropria" di array statico, in quanto tu puoi usare quella sintassi solo se specifichi le variabili all'interno:
    
    int a[] = { 10, 20, 30 };
    
    L'unico modo di allocare memoria dinamica è quella di usare i puntatori, quindi nella classe devi sostituire:
    
    int iArray[]; // NO
    int *iArray;  // OK
    
Devi accedere o registrarti per scrivere nel forum
4 risposte