01/09/11 14:06
drewnik99
Posto tutta la funzione:
struct comp *comps = 0;
struct comp *ccompx(const char name[])
{
struct comp *p;
struct comp *pa;
glob = 0;
pa = (struct comp*) malloc(sizeof(struct comp));
if(!pa)
{
puts("Ricerca interrotta.");
return 0;
}
int s;
for(p = comps, s = 1; p; p = p->n, s++)
{
int i = 0;
for(; name[i] != p->name[i]; i++);
if(p && name[i] == p->name[i])
{
int a = 1;
for(; name[i + a] == p->name[i + a]; a++);
if(a == strlen(name))
{
pa[s - 1] = p; // errore
glob++;
realloc(pa, sizeof(struct comp) * s + 1);
if(!pa)
{
puts("Ricerca non completata.")
goto ret;
}
}
return 0;
}
}
ret:
return pa;
}
Qual è l'errore in quell'assegnamento?
Ultima modifica effettuata da drewnik99 01/09/11 17:31
aaa
01/09/11 15:46
comina8
La variabile "ppa" non la usi da nessuna parte quindi puoi dichiarare solo "pa" assegnandole poi il ritorno della funzione malloc...
Inoltre non vedo nessuna free e nella funzione realloc devi passare "pa" non "*pa".
p non lo inizializzi (non usi la malloc).
Probabilmente il programma ti va in crash...
aaa
01/09/11 17:00
drewnik99
*ppa serve, perchè se il programma non riesce a riallocare la memoria, realloc restituisce un puntatore nullo e occorre un altro puntatore perchè la funzione restituisca la struttura.
L'errore lo restituisce il compilatore, durante la compilazione, non in esecuzione.
Perchè dovrei inizzializzare p con malloc?
aaa
01/09/11 17:22
drewnik99
Errore: incompatible types when assigning to type 'struct comp' from type 'struct comp *'|
Ultima modifica effettuata da drewnik99 01/09/11 17:35
aaa
01/09/11 22:43
drewnik99
Ho apportato le seguenti modifiche:
struct comp *p = (struct comp*)malloc(sizeof(struct comp));
if(!p)
{
//
}
struct comp **pv = 0;
struct comp ***point;
int s;
for(p = comps, s = 1; p; p = p->n, s++)
{
unsigned int i = 0;
for(; name[i] != p->name[i]; i++);
if(p && name[i] == p->name[i])
{
unsigned int a = 1;
for(; name[i + a] == p->name[i + a]; a++);
if(a == strlen(name))
{
pv = (struct comp **) realloc(pv, sizeof(struct comp*) * (s + 1));
if(!pv)
{
goto ret;
}
point = &pv;
pv[s] = p;
}
continue;
}
}
pv[0]->code = s; // l'elemento 0 funge da contatore degli
ret: // elementi totali
return point;
}
Se volessi che la funzione restituisse questo vettore di strutture, in modo da poterlo utilizzare nella funzione principale, quali modifiche dovrei apllicare al codice?
Ultima modifica effettuata da drewnik99 01/09/11 22:58
aaa