Domanda

Sto scrivendo un programma in C ++ che implementa una lista doppiamente collegata che contiene un singolo carattere in ogni nodo. Sto Inserimento di caratteri tramite la funzione di aggiunta:

doubly_linked_list adam;
adam.append('a');

Questa funzione è implementata nel seguente modo:

//Append node
    node* append(const item c){

        //If the list is not empty...
        if(length){
            //maintain pointers to end nodes
            node* old_last_node = last;
            node* new_last_node = new node;

            //re-assign the double link and exit link
            old_last_node->next = new_last_node;
            new_last_node->back = old_last_node;
            new_last_node->next = NULL;

            //re-assign the last pointer
            last = new_last_node;
        }
        //If this is the first node
        else{
            //assign first and last to the new node
            last = first = new node;

            //assign nulls to the pointers on new node
            first->next = first->back = NULL;
        }

        //increase length and exit
        ++length;
        return last;
    }

Tuttavia, penso che ci sia un problema, magari con il modo in cui C ++ gestisce caratteri. Quando vado a stampare la mia lista, in qualche modo ho mai ottenere i caratteri per la stampa, che ho aggiunto alla mia lista. Questo è quello che sto usando per la stampa:

//Friendly output function
    friend std::ostream& operator << (std::ostream& out_s, const doubly_linked_list& source_list){
        //create iteration node pointer
        node* traverse_position = source_list.first;

        //iterate through, reading from start
        for(int i = 1; i <= source_list.length; ++i){
            //print the character
            out_s << (traverse_position->data);
            traverse_position = traverse_position->next;
        }

        //return the output stream
        return out_s;
    }

ottengo solo stronzate, quando lo stampo. Esso stampa personaggi che non ho mai aggiunto alla mia lista - si sa, solo personaggi solo da qualche parte nella memoria. Che cosa potrebbe essere la causa?

È stato utile?

Soluzione

Da dove si effettua assegnando il valore di c nella funzione append()? Temo si può avere concentrato troppo sulla parte doppiamente lista concatenata e non abbastanza sulla parte memorizzazione dei dati. :)

Altri suggerimenti

Come altri hanno già detto, ti sei dimenticato di memorizzare i caratteri che sarebbero state aggiungendo. E 'un errore ragionevole fare. Per evitare in futuro, è possibile lasciare che il compilatore aiuto.

La maggior parte dei compilatori offrono avvertenze di cose che sono tecnicamente OK, ma probabilmente non sono ciò che si vuole veramente fare. Nel tuo caso, hai dichiarato il parametro c, ma non avete mai usato. Con avvisi attivati, il compilatore potrebbe aver notato che e ti ha detto che non aveva usato. Che sarebbe probabilmente bastato di un promemoria per te, che non fossi finito di scrivere quella funzione.

opzione di GCC per abilitare gli avvisi comuni è -Wall. (Che è "W" per "warning", oltre a "tutto", ma non ha nulla a che fare con le pareti, ma non è davvero tutti avvertimenti, sia.). Per esempio:

g++ -Wall list-program.cpp

Altre compilatori hanno opzioni simili. Consultare la documentazione del compilatore per i dettagli.

Nessun dove nel metodo append si fa effettivamente inserire l'elemento nel nuovo nodo. Quando si va a stampare, si limita a stampare qualsiasi valore sembra essere in quella posizione di memoria (un valore casuale).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top