Poi ho visto che in realtà mi sbagliava sempre perchè non c' era bisogno di fare la riallocazione.
Alla fine ho visto che ritornando il valore funzionava,solo che non mi stampava le stringhe.
Per cui ho deciso di cambiare tattica,all' esame c' era il metodo delle liste concatenate,che non ho mai usato.
C 'era una struttura del genere:
codice:
struct lista
{
int valore;
nodo *next;
}elem;
La struttura elem è definita,next contiene il puntatore al prossimo elemento.
Praticamente per scavalcare questo metodo,che a me pareva contorto e non riuscivo a fare,invece di aggiungere semplicemente elementi per espandere la lista o per fare le operazioni,ricreavo una lista nuova e poi la sostituivo a quella precedente.
L' esercizio più difficile chiedeva di cancellare i valori uguali a num in modo da modificare la lista e liberare le aree di memoria,però non sapendo come fare mi sono dovuto inventare un trucchetto:
codice:
//Lo scopo è cancellare gli elementi che hanno il valore uguale a num.
void add (elem *lista, int num)
{
int i=0,size=0;
elem *copia,*new;
while(lista[i].next!=NULL)
{
if(lista[i].valore!=num)
{
size++;
if(size==1)
new=(elem*)malloc(sizeof(elem));
else
new=(elem*)realloc(new,size*sizeof(elem));
new[size-1].valore=lista[i].valore;
}
//facevo il solito controllo per vedere se non ritorna NULL
i++;
}
for(i=0;i<num-1;i++)
{
new[i].next=&new[i+1];
}
copia=lista;
lista=new;
free(copia);
}
Ho provato a fare così,è corretto?
Ho giocato in trasferta perchè non era il mio metodo.
A proposito del vecchio codice: sono poi riuscito a farlo partire facendo come ha detto YuYevon,poi infatti all' esame quando c'erano liste con nomi e cognomi definivo MAX_LENGHT e la tiravo su con fgets,grazie mille del consiglio