PDA

View Full Version : [C]Aiuto programma con allocazione dinamica...


phantom85
28-01-2008, 16:08
Ciao a tutti, spero che ci sia qualcuno che abbia voglia di aiutarmi.

Devo scrivere un programma che riceve da input dall'utente una sequenza di numeri interi, e la sequenza termina con 0.
Poi il programma deve stampare a video la sequenza al contrario, escluso lo 0.
vi allego una prima versione che compila ma non va, nel senso che non termina mai l'inserimento da input...

La versione definitiva di questo programma è che non potendo prevedere quanti numeri verranno inseriti, dovrei allocare la memoria necessaria in modo dinamico (ad
esempio raddoppiando la lunghezza del vettore ogni volta che questo si riempie)...


qualcuno è cosi gentile da aiutarmi!Grazie!!!

yorkeiser
28-01-2008, 16:22
Basta che fai una malloc iniziale, del tipo

int* array;
array = (int*)malloc(dimensione_array*sizeof(int))

e quindi fai una realloc ogni volta che inserisci un numero di interi pari a dimensione_array (per fare il confronto, basta che utilizzi un contatore e lo incrementi ogni volta che inserisci un nuovo intero)

dimensione_array = dimensione_array+x;
array = (int*)realloc(array, dimensione_array*sizeof(int));

dove x è l'incremento che prevedi di volta in volta per il tuo array

phantom85
28-01-2008, 16:42
devo per forza usarla la realloc??

sai oltre alla malloc non ci hanno insegnato altro quindi vorrei usare solo la malloc se possibile...


potresti anche dirmi come dovrei quindi modificare il codice che ho postato??

AnonimoVeneziano
28-01-2008, 16:51
L'unica soluzione con la malloc è quella di creare un nuovo array di dimensione doppia , copiare il vecchio array (ad esempio con una "memcpy()") nei primi elementi del nuovo array e fare una "free()" sul vecchio array

Ciao

phantom85
28-01-2008, 16:54
sai dirmi come dovrei modificare il codice??

yorkeiser
28-01-2008, 16:55
Esistono altre funzioni di riallocazione oltre alle classiche malloc/realloc, ma dalle mie conoscenze la sola malloc non ti basta, a meno che tu non sappia a priori il numero massimo di elementi che andrai ad inserire. Se vuoi usare la sola malloc, puoi fare un'allocazione di un array abbastanza grande (per esempio, (int*) malloc (1000 * sizeof(int), ovvero un array di mille interi), ma così perdi il vantaggio dell'allocazione dinamica.

phantom85
28-01-2008, 17:03
e si cosi nn avrebbe senso...però l'idea di anonimo veneziano non è male...solo che non so come modificare il codice per farlo andare...