PDA

Visualizza la versione completa : [C] Allocare memoria al volo


Vre
04-04-2007, 22:02
Ho cercato nel forum relativamente ala funzione malloc() ma niente mi ha convinto...il mio problema è semplice...

L'utente deve inserire n dati in un array e può continuare ad inserire dati fino a che non da un invio a vuoto (ovvero fino a che l'ultimo valore dell'array non è nullo). Come faccio a dichiarare questo array e come posso poi togliere l'ultima casella di memoria (che risulterà ovviamente vuota)?

Grazie.

MItaly
04-04-2007, 22:40
O con una malloc iniziale e una serie di realloc o usando una struttura di dati complessa, come una lista (che, se devi aggiungere un elemento alla volta, è di solito la soluzione migliore).

Vre
04-04-2007, 22:42
un esempiuccio o una spiegazione più pratica...?

io posso mettere:

a = (int*)malloc(k*sizeof(int));

però il k cambierà via via...no? Come posso dire "allocami via via tanta memoria quanta me ne serve"?



il php non da di questi problemi:D

Xaratroom
04-04-2007, 22:44
L'ultima casella di memoria non allocarla proprio
es:
leggi
ripeti
alloca e memorizza
leggi
finchè valore letto non vuoto

Xaratroom
04-04-2007, 22:46
int *a = (int*) malloc (<numero di elementi da allocare>*sizeof(int));

Vre
04-04-2007, 22:54
come qui, quindi?

http://forum.html.it/forum/showthread.php?threadid=1107316&highlight=malloc

MItaly
04-04-2007, 23:08
Originariamente inviato da Vre
un esempiuccio o una spiegazione più pratica...?

io posso mettere:

a = (int*)malloc(k*sizeof(int));

però il k cambierà via via...no? Come posso dire "allocami via via tanta memoria quanta me ne serve"?



#include <stdlib.h>
void main()
{
int * myarray = 0;
int size = 0;
int counter;
while(1)
{
myarray = realloc(myarray,(++size)*sizeof(int));
printf("Inserisci un numero intero o del testo per uscire [%d]: ",size);
if(scanf("%d", &myarray[size-1])==0) break;
}
size--;
for(counter=0;counter<size;counter++)
printf("%d\n",myarray[counter]);
return;
}


il php non da di questi problemi:D
Il PHP ti spaccia per array delle hashtables...

Vre
04-04-2007, 23:10
Grazie a tutti, ho risolto!!

Loading