PDA

Visualizza la versione completa : [C] Array di Strutture: errore nella printf


Vik27
03-06-2010, 08:24
Salve a tutti, ho la seguente parte codice che dovrebbe servirmi per risolvere un'esercizio per un'esame:



typedef struct M
{
char *Molecola;
} ;

char nome[80];
int elem = 10;

M* NomeMolecola = (M*) malloc(elem * sizeof(M));

if (NomeMolecola == NULL)
printf("Errore");

M* p;
p = NomeMolecola;
for (int i=0; i < elem; i++)
{
p->Molecola = NULL;
p++;
}

for (int i=0; i < elem; i++)
{
printf("nome molecola: \n";
scanf("%s", nome);
NomeMolecola->Molecola = strdup(nome);
NomeMolecola++;
}


for (int i=0; i < elem; i++)
{
printf("%s\n", NomeMolecola[i].Molecola);
system("pause");
}


Non riesco a capire per quale motivo quando faccio la printf del contenuto il programma va in crash, in debug dopo la scanf le strutture puntano a dei valori validi, nella printf no!
Grazie in anticipo !

oregon
03-06-2010, 08:46
Se durante il primo for modifichi il valore del puntatore NomeMolecola con

NomeMolecola++;

quando parte il secondo for, quel puntatore avrÓ un valore non valido (non punterÓ all'inizio dell'insieme di strutture ma alla fine).

Devi eliminare le due righe

NomeMolecola->Molecola = strdup(nome);
NomeMolecola++;

e al loro posto usare

NomeMolecola[i].Molecola = strdup(nome);

Vik27
03-06-2010, 08:58
Grazie, forse nelle 1000 prove che ho fatto l'ho anche provato....cmq appena posso provo ....

Vik27
03-06-2010, 12:19
Grazie Oregon!
Funziona!
Probabilmente quando l'avevo provato non avevo tolto NomeMolecola++.

LeleFT
03-06-2010, 12:25
In futuro, specifica il linguaggio di programmazione usato nel titolo della discussione e usa gli appositi tag CODE quando posti del codice, come indicato nel Regolamento interno (http://forum.html.it/forum/showthread.php?s=&threadid=973887).


Ciao. :ciauz:

Vik27
03-06-2010, 15:59
Ooops, chiedo scusa...

Loading