PDA

Visualizza la versione completa : [C] Impossibile accedere a elementi di una struct


Metallica
28-11-2008, 18:11
Allora ho una struttura che supponiamo si chiami STRUTT e la assegno così


int main()
{
STRUTT **miaVar = NULL;
int N = 0;

funzioneEsterna(&miaStrutt, &N);
miaStrutt[0]->campo1 = "xyz";
miaStrutt[0]->campo2 = "123";
}

int funzioneEsterna(STRUTT ***Elem, int *N)
{
allocaMemoria(Elem, N);
}


Così funziona tutto correttamente, quello che vorrei è che le due righe:


miaStrutt[0]->campo1 = "xyz";
miaStrutt[0]->campo2 = "123";

possano essere scritte tramite la funzione funzioneEsterna() e non nel main, come posso fare? Tutti i miei tentativi mi danno errore.

Grazie è importante! :)

oregon
28-11-2008, 20:19
Posta anche la struttura e la dichiarazione di miaStrutt

Metallica
28-11-2008, 20:52
struct Contatto {
char *Nome;
char *Cognome;
char *IndirizzoMail;
};

Questa è la struttura.

miaStrutt è in realtà miaVar.
Ho sagliato nell'editare per il forum

oregon
28-11-2008, 21:01
Allora, prima di tutto, non puoi utilizzare i puntatori della struttura senza allocare lo spazio per le stringhe.

In C, infatti, le stringhe non si assegnano con il simbolo = ma con la funzione strcpy.

Dopo che ti sei chiarito questa parte, passiamo al resto (ai problemi della struttura e della funzione ...)

dogo21sob
28-11-2008, 21:08
a occhio mi sembra che abbiamo più o meno lo stesso problema.. stai facendo anche tu la rubrica?

Metallica
29-11-2008, 11:53
Originariamente inviato da dogo21sob
a occhio mi sembra che abbiamo più o meno lo stesso problema.. stai facendo anche tu la rubrica?
Sì, ti avevo riconosciuto subito nell'altro post :D.

Quindi se dichiaro la struttura, definendo il numero di char: esempio char Nome[64] dopo assegno con strcpy dovrei risolvere giusto?

oregon
29-11-2008, 11:59
Originariamente inviato da Metallica
Quindi se dichiaro la struttura, definendo il numero di char: esempio char Nome[64] dopo assegno con strcpy dovrei risolvere giusto?

Diciamo che saresti sulla buona strada ... ma poi bisogna vedere il resto del codice ...

Metallica
29-11-2008, 13:56
Beh, così non mi da problemi in compilazione però crasha.

Nel senso:
Lasciando il main così


typedef struct Contatto {
char a[64];
char b[64];
char c[64];
} STRUTT;


int main()
{
// ...
STRUTT **miaVar = NULL;
int N = 0;

funzioneEsterna(&miaVar, &N);

}


funzione esterna così:


int funzioneEsterna(STRUTT ***Prova, int *N)
{
if (Rialloca(Prova, N)==0)
{
strcpy((*Prova[0])->a, "aaa");
strcpy((*Prova[0])->b, "bbb");
strcpy((*Prova[0])->c, "ccc");
}
}


con Rialloca che ha un prototipo come:


int Rialloca(STRUTT ***struttura, int *N);


Ora il prolema è:
La funzione rialloca compie il suo lavoro, il problema è la strcpy in funzioneEsterna, infatti con un solo valore funziona, con 2 va in crash. Come devo fare per assegnare correttamente i valori alla struttura?

oregon
29-11-2008, 14:07
Mostrare la funzione

Rialloca

mi sembra necessario ...

Metallica
29-11-2008, 14:12
int Rialloca
( STRUTT ***PpTesta, // puntatore al puntatore all'array dei puntatori
int *Pn // puntatore al numero di elementi allocati
)
{ STRUTT **Temp;
int Errore = -1;

Temp = (STRUTT **)realloc(*PpTesta, (*Pn+1)*sizeof(STRUTT*));
if (Temp != NULL)
{
Temp[*Pn] = (STRUTT *)malloc(sizeof(STRUTT));
if (Temp[*Pn] != NULL)
{
*PpTesta = Temp;
(*Pn)++; // senza le parentesi verrebbe incrementato Pn
Errore = 0; // allocazione avvenuta con successo
}
}
return Errore;
}

Loading