|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Nov 2002
Messaggi: 257
|
[C] Liste
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.
Codice:
dcc_struct_indice->prev->next=dcc_struct_indice->next; dcc_struct_indice->next->prev=dcc_struct_indice->prev; Anche con le partentesi idem, dove sbaglio ?
__________________
WebMaster di http://www.dccworld.coml'unico sito italiano dedicato interamente ai sistemi di controllo digitale per il modellismo ferroviario. Ultima modifica di buddace : 19-06-2007 alle 10:25. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
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.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Nov 2002
Messaggi: 257
|
In un file lista.h ho definito:
Codice:
typedef struct buffer_dcc_struct { unsigned int dcc_byte1; unsigned int dcc_byte2; struct dcc_struct *next; struct dcc_struct *prev; } dcc_struct; Codice:
dcc_struct *dcc_struct_indice,*temp;
__________________
WebMaster di http://www.dccworld.coml'unico sito italiano dedicato interamente ai sistemi di controllo digitale per il modellismo ferroviario. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
...e la struct dcc_struct la definisci dove?
![]() (hint: cambia la definizione di *prev e *next come struct buffer_dcc_struct)
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: Nov 2002
Messaggi: 257
|
Quote:
![]()
__________________
WebMaster di http://www.dccworld.coml'unico sito italiano dedicato interamente ai sistemi di controllo digitale per il modellismo ferroviario. |
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Nov 2002
Messaggi: 257
|
Riferita alla lista di prima, è giusta la sequente funzione ? Mi torna sempre 0.
Codice:
dcc_struct *newslot(void) { return (struct buffer_dcc_struct *)malloc(sizeof(struct buffer_dcc_struct)); }
__________________
WebMaster di http://www.dccworld.coml'unico sito italiano dedicato interamente ai sistemi di controllo digitale per il modellismo ferroviario. Ultima modifica di buddace : 19-06-2007 alle 13:14. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
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.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Nov 2002
Messaggi: 257
|
La funzione mi ritorna sempre 0 no NULL
![]()
__________________
WebMaster di http://www.dccworld.coml'unico sito italiano dedicato interamente ai sistemi di controllo digitale per il modellismo ferroviario. |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
NULL corrisponde a (void *) 0
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:54.