In C, mi capita spesso di incontrare errori con codice come questo
prio_queue->head[index] = newEntry;
Restituisce un "" Impossibile assegnare la voce ** alla voce * " Come prevedi / debugga errori di questo tipo, in generale?
Se head è una matrice di elementi e index è < dimensione di tale array e newEntry è dello stesso tipo dell'array e prio_queue è un puntatore a una struttura di dati contenente head, quindi non c'è nulla di sbagliato in questo codice.
Un sacco di ifs, ma senza conoscere le tue strutture dati, io (e nessun altro) posso capire se è giusto o sbagliato.
Aggiornamento: Sulla base dell'aggiornamento alla domanda, una strategia consisterebbe nel tenere traccia di quanti livelli di riferimento indiretto hanno una variabile.
Ci sono due tipi di problemi che potresti incontrare:
Il livello di compilazione in cui i tipi di dati puntatore non corrispondono
Il tempo di esecuzione si verifica quando i limiti dell'array si espandono e quindi violano l'accesso alla memoria o corrompono la struttura interna dei dati, il che causerà problemi di memoria in seguito nell'esecuzione.
Il tuo problema sembra un problema di compilazione rispetto al tempo di esecuzione, quindi sembra più un problema di mancata corrispondenza del tipo di dati, ma per lo più abbiamo bisogno di ulteriori informazioni. Si prega di elaborare.
Sono stato lontano da un compilatore C per diversi anni, ma non ti sta dicendo che prio_queue- > head [index] è un puntatore a Entry e newEntry è un puntatore a un puntatore a Entry? Prova:
prio_queue- > head [index] = * newEntry;
How do you prevent/debug errors of this type, in general?
Questo particolare problema si riduce alla conoscenza dei tipi delle rispettive espressioni e non ci sono scorciatoie a ciò; o lo sai o non lo fai. La domanda a cui rispondere è perché i tipi sono diversi in primo luogo; questo indica che qualcuno era un po 'confuso quando ha scritto il codice.
Leggi altre domande sui tag debugging code-quality c pointers