Quali sono le buone strategie in C per gestire gli errori puntatori di questo tipo? [chiuso]

-5

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?

    
posta Adel 27.02.2012 - 01:04
fonte

4 risposte

3

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.

    
risposta data 27.02.2012 - 01:12
fonte
2

Ci sono due tipi di problemi che potresti incontrare:

  1. Il livello di compilazione in cui i tipi di dati puntatore non corrispondono

  2. 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.

    
risposta data 27.02.2012 - 06:03
fonte
2

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;

    
risposta data 27.02.2012 - 13:46
fonte
0

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.

    
risposta data 29.02.2012 - 13:01
fonte

Leggi altre domande sui tag