PDA

View Full Version : [C] Liste


buddace
19-06-2007, 10:00
sto scrivendo del codice che usa una lista con doppio link (precedente e successivo). Nel caso di rimozione di un elemento intermedio vorrei semplicemente reindirizzare i puntatori degli elementi precedente e successivo.


dcc_struct_indice->prev->next=dcc_struct_indice->next;
dcc_struct_indice->next->prev=dcc_struct_indice->prev;

Il compilatore mi dice: error: dereferencing pointer to incomplete type
Anche con le partentesi idem, dove sbaglio ?

ilsensine
19-06-2007, 10:48
Quell'errore viene generato quando di un puntatore hai a disposizione la dichiarazione "anonima" dell'oggetto puntato, ad es:
struct mystruct;
e non la definizione completa.

buddace
19-06-2007, 11:00
In un file lista.h ho definito:
typedef struct buffer_dcc_struct {
unsigned int dcc_byte1;
unsigned int dcc_byte2;
struct dcc_struct *next;
struct dcc_struct *prev;
} dcc_struct;

E nella mia funzione ho definito
dcc_struct *dcc_struct_indice,*temp;

ilsensine
19-06-2007, 11:00
...e la struct dcc_struct la definisci dove? :)
(hint: cambia la definizione di *prev e *next come struct buffer_dcc_struct)

buddace
19-06-2007, 11:19
...e la struct dcc_struct la definisci dove? :)
(hint: cambia la definizione di *prev e *next come struct buffer_dcc_struct)
Grazie per l'aiuto :) effettivametne oltre a sparire il messaggio di errore sono spariti anche una serie di messaggi di warning !

buddace
19-06-2007, 13:08
Riferita alla lista di prima, è giusta la sequente funzione ? Mi torna sempre 0.
dcc_struct *newslot(void)
{
return (struct buffer_dcc_struct *)malloc(sizeof(struct buffer_dcc_struct));
}

ilsensine
19-06-2007, 13:38
E' giusta e non può ritornare NULL.

Nota che "struct buffer_dcc_struct" è necessario solo per dichiarare prev e next, in qualsiasi altra parte puoi usare il typedef dcc_struct.

buddace
19-06-2007, 13:48
La funzione mi ritorna sempre 0 no NULL :( non vorrei che sia un problema delle librerie che sto usando.

ilsensine
19-06-2007, 14:10
La funzione mi ritorna sempre 0 no NULL :(
NULL corrisponde a (void *) 0