|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
[C] Allocazione dinamica della memoria
Ciao a tutti,
vorrei creare un array che si allarga dinamicamente in modo da avere un vettore con tutto ciò che l'utente ha inserito da stdin. Ho definito queste due strutture: Codice:
struct Persona{
char nome[30];
char cognome[30];
};
struct vettorePersone{
int size;
struct Persona* elementi;
};
Codice:
struct vettorePersone vett;
vett.size=0;
do{
struct Persona pers;
printf("Inserisci nome e cognome separati da spazio...\n");
scanf("%s %s", pers.nome, pers.cognome);
printf("Nome: %s\nCognome: %s\n", pers.nome, pers.cognome);
vett.elementi = (struct Persona *)malloc(sizeof(struct Persona)*(++vett.size));
*(vett.elementi+vett.size)=pers;
vett.size++;
printf("Continuare? s/n \n");
scanf("%s", risposta);
}while(strcmp(risposta,"n")!=0);
Grazie, ciao ciao. |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 93
|
L'errore risiede nell'incremento di vett.size durante la malloc
Codice:
vett.elementi = (struct Persona *)malloc(sizeof(struct Persona)*(++vett.size)); Codice:
*(vett.elementi+vett.size)=pers; Dovresti quindi semplicemente scrivere: Codice:
vett.elementi = (struct Persona *)malloc(sizeof(struct Persona)*(vett.size+1)); |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
Ciao,
io ho provato a fare così: Codice:
vett.elementi = (struct Persona *)realloc(vett.elementi,sizeof(struct Persona)*(++vett.size)); *(vett.elementi+vett.size-1)=pers; Grazie mille, ciao ciao. |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 93
|
Funzionare funziona ma è concettualmente sbagliato (oltre a rendere poco leggibile il tuo codice): è inutile incrementare una variabile per poi usarne il valore -1.
Senza contare che così facendo incrementi la variabile contatore ben due volte nello stesso ciclo. L'incremento va fatto quando DEVE essere fatto. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:12.



















