Originariamente inviato da Kandalf
e *paus nn lo uso +?
nn ho capito molto bene...
Mi so spiegare molto male :adhone:
*paus lo usi soltanto come variabile temporanea: la allochi e poi la associ a p->... Se invece allochi direttamente p fai molto prima
Nella funzione aggiungi() esegui un controllo per vedere se p è NULL oppure no...
Se p è NULL devi allocarlo in memoria con la funzione malloc e inizializzargli le variabili...
Se p invece non è NULL (quindi esiste già) devi richiamare la stessa funzione passandogli p->next, e questo avviene finchè non trovi l'ultimo valore di p, quello la cui variabile next non è stata ancora allocata... Quando viene trovata, la nuova variabile viene allocata e le funzioni vengono richiamate all'opposto (questo per la ricorsione)...
Se te ogni volta allochi *paus, lo fai molte volte non necessarie... altrimenti lo faresti solo una volta...
Ho scorto un altro piccolo erroretto...
la funzione malloc restituisce un puntatore a void... Devi eseguire il cast perchè restituisca un valore del tipo voluto: p->next = (hello *) malloc (sizeof(hello));
Prova a sostituire la tua funzione aggiungi con questa:
codice:
/* Crea elementi successivi */
hello *aggiungi(hello *p, int ins)
{
if (p == NULL) {
p = (hello *) malloc(sizeof(hello));
p->n = ins;
p->next = NULL;
}
else {
p = aggiungi(p->next, ins);
}
return p;
}
Se hai altre domande non esitare a porle