Beh si la copre perchè la stai anche ridichiarando oltre a riallocarla, prova così: s = new myType[x+1]; incece che così myType* s = new myType[x+1];Originariamente inviato da haunted
Salve a tutti,
ho bisogno di una funzione che mi permetta di allargare il mio array dinamico e di aggiungere un ulteriore elemento. La mia idea era quella di traferire il contenuto dell'array vecchio in uno temporaneo, allocare l'array con le nuove dimensioni e ricopiare gli elementi. Sfortunatamente quando vado a dichiarare nuovamente l'array puntato da s, il compilatore mi restituisce un errore dicendo che il nuovo valore copre il vecchio... il che è impossibile se l'array vecchio è stato opportunamente deallocato. Come posso risolvere? Di seguito c'è il codice. Grazie anticipatamente per l'aiuto.
codice://la funzione prende in ingresso un puntatore ad array allocato dinamicamente, // una variabile x che indica le dimensioni dell'array e una variabile obj. void myFunction (myType* s, int &x, myType obj) { //allocazione di un array temporaneo per copia degli elementi di s; myType* a = new myType[x]; //copia degli elementi di s; for (int i = 0; i < x; i++) { *(a+i) = *(s+i); } //deallocazione dell'array puntato da s ed il puntatore non punta più ad alcun array. delete []s; s = NULL; //nuova allocazione di s: il compilatore mi dice che questa istruzione copre //la variabile dichiarata all'interno degli argomenti della funzione. //('declaration of 'myType* s' shadows a parameter.') myType* s = new myType[x+1]; for (int i = 0; i < x; i++) { *(s+i) = *(a+i); } *(s+x+1) = obj; dim++; }