View Full Version : [c] Problema con Mallc
h1jack3r
19-06-2004, 12:02
cosa c'è di sbagliato in questa funzione che il compilatore mi da un errore
"Cannot convert bool to vetture*"
mi sapreste aiutare?
struct vetture *caricavettura(struct vetture *puntavettura,FILE *fp1){
int n,i,dispon;
char stringa[80];
fscanf(fp1,"%d",&n);
if(puntavettura=(struct vetture*)malloc((sizeof(struct vetture)*n)==NULL)
printf("Memoria esaurita");
for(i=0,i<n,i++){
fscanf(fp1,"%d",&dispon);
puntavettura[i]->disponibili=dispon;
fscanf(fp1,"%s",stringa);
strcpy(puntavettura[i]->modello,stringa);}
}
Ed_Bunker
19-06-2004, 12:08
Originariamente inviato da h1jack3r
cosa c'è di sbagliato in questa funzione che il compilatore mi da un errore
"Cannot convert bool to vetture*"
mi sapreste aiutare?
struct vetture *caricavettura(struct vetture *puntavettura,FILE *fp1){
int n,i,dispon;
char stringa[80];
fscanf(fp1,"%d",&n);
if(puntavettura=(struct vetture*)malloc((sizeof(struct vetture)*n)==NULL)
printf("Memoria esaurita");
for(i=0,i<n,i++){
fscanf(fp1,"%d",&dispon);
puntavettura[i]->disponibili=dispon;
fscanf(fp1,"%s",stringa);
strcpy(puntavettura[i]->modello,stringa);}
}
Magari non sara' ma prova:
if ( (puntavettura = (struct vetture*)malloc(sizeof(struct vetture) * n)) == NULL)
...
...
(Mi sa che hai messo male le parentesi e sia la precedenza degli operatori a crearti problemi...)
h1jack3r
19-06-2004, 12:16
Originariamente inviato da Ed_Bunker
Magari non sara' ma prova:
if ( (puntavettura = (struct vetture*)malloc(sizeof(struct vetture) * n)) == NULL)
...
...
(Mi sa che hai messo male le parentesi e sia la precedenza degli operatori a crearti problemi...)
forse è andata....ti spiego quello che voglio fare, praticamente ho allocato memoria per quel tipo di struttura, in questo modo ho creato un vettore di strutture vero? Al quale posso accedere con
puntavettura[0]->qualcosa
puntavettura[1]->qualcosa
eccetera giusto?
Ed_Bunker
19-06-2004, 13:37
Originariamente inviato da h1jack3r
forse è andata....ti spiego quello che voglio fare, praticamente ho allocato memoria per quel tipo di struttura, in questo modo ho creato un vettore di strutture vero? Al quale posso accedere con
puntavettura[0]->qualcosa
puntavettura[1]->qualcosa
eccetera giusto?
Cosi' facendo hai ottenuto un puntatore ( puntavettura ) che punta ad una area di memoria abbastanza grande da contenere n elementi di tipo struct vetture. Tali elementi saranno accessibili deferenziando (Con l'operatore *) il puntatore puntavettura.
Ovvero:
puntavettura inizialmente punta al primo elemento dell'area di mem allocata; facendo p = p+1 puntera' al secondo elemento e cosi' via. Facendo (*p).nomeCampo (oppure p->nomeCampo) accederai al nomeCampo del singolo elemento (struct vetture)puntato (In quel momento) da punta vettura.
Penso sia cosi.
Ciao.
Diabolik.cub
20-06-2004, 22:59
Originariamente inviato da Ed_Bunker
Magari non sara' ma prova:
if ( (puntavettura = (struct vetture*)malloc(sizeof(struct vetture) * n)) == NULL)
forse sbaglierò io.. ma non è che volevi crearti un vettore di puntatori a struttura? Nel caso dovresti aggiungere un asterisco sia nel cast che nel sizeof.. Inoltre in caso di vettori è più indicata la malloc che ti permette di indicare il numero di celle e le inizializza a NULL automaticamente.
if ( (puntavettura = (struct vetture **)calloc(n, sizeof(struct vetture *))) == NULL)
in questo modo ha un senso
puntavettura[0]->qualcosa
Ed_Bunker
20-06-2004, 23:51
Originariamente inviato da Diabolik.cub
forse sbaglierò io.. ma non è che volevi crearti un vettore di puntatori a struttura? Nel caso dovresti aggiungere un asterisco sia nel cast che nel sizeof.. Inoltre in caso di vettori è più indicata la malloc che ti permette di indicare il numero di celle e le inizializza a NULL automaticamente.
if ( (puntavettura = (struct vetture **)calloc(n, sizeof(struct vetture *))) == NULL)
in questo modo ha un senso
puntavettura[0]->qualcosa
Non so cosa volesse fare... :D :D Pero' il parametro passato alla funzione "caricavettura" (puntavettura) e' un puntatore ad una variabile di tipo 'struct vetture'. Per questo credevo che l'allocazione andasse bene cosi' come l'ho scritta sopra...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.