ciao, ho creato la classe lista con i puntatori con i relativi metodi. ho un problema: se inserisco solo un nuovo record, quando faccio la lettura dell'elemento del record non ci sn problemi, stampa a video il valore dell'elemento del record; se, invece, faccio un inserimento iterativo di più elementi (nell'esempio che ho creato ne sono 10) mi stampa a video gli indirizzi dei record al posto dei valori degli elementi. ora posto i codici che ho creato:

listap.h
codice:
#ifndef _LISTAP_H
#define _LISTAP_H

#include <iostream>

using namespace std;

typedef int tipoelem;
struct cella
        {
            tipoelem elemento;
            struct cella* precedente;
            struct cella* successivo;
        };
typedef cella* posizione;

class listap
{
    public:
        posizione lista;
                
        listap();
        void crealista();
        bool listavuota();
        posizione primolista();
        bool finelista(posizione);
        posizione succlista(posizione);
        posizione predlista(posizione);
        tipoelem leggilista(posizione);
        void scrivilista(posizione &, tipoelem);
        void inslista(posizione &, tipoelem);
        void canclista(posizione &);
};

#endif
listap.cpp
codice:
#include "listap.h"

listap::listap()
{
    crealista();
}

void listap::crealista()
{
    tipoelem elementonullo;
    lista = (posizione) malloc(sizeof(cella));
    lista->elemento = elementonullo;
    lista->precedente = lista;
    lista->successivo = lista;
}

bool listap::listavuota()
{
    return((lista->successivo == lista) && (lista->precedente == lista));
}

posizione listap::primolista()
{
    return(lista->successivo);
}

bool listap::finelista(posizione pos)
{
    return(pos->successivo == lista);
}

posizione listap::succlista(posizione pos)
{
    return(pos->successivo);
}

posizione listap::predlista(posizione pos)
{
    return(pos->precedente);
}

tipoelem listap::leggilista(posizione pos)
{
    return(pos->elemento);
}

void listap::scrivilista(posizione &pos, tipoelem elem)
{
    pos->elemento = elem;
}

void listap::inslista(posizione &pos, tipoelem elem)
{
    posizione temp;
    temp = new cella;
    temp->elemento = elem;
    temp->precedente = pos->precedente;
    temp->successivo = pos;
    pos->precedente = temp;
    (pos->precedente)->successivo = temp;
    pos = temp;
}

void listap::canclista(posizione &pos)
{
    posizione temp = pos;
    (pos->successivo)->precedente = pos->precedente;
    (pos->precedente)->successivo = pos->successivo;
    pos = pos->successivo;
    delete(temp);
}
provalistap.cpp
codice:
#include <cstdlib>
#include <iostream>
#include "listap.h"

#define MAX 10

using namespace std;

int main(int argc, char *argv[])
{
    listap l;
    posizione p = l.primolista();
    tipoelem i = 0;
    while(i <= MAX)
    {
        l.inslista(p, i);
        p = l.succlista(p);
        i++;
    }
    i = 0;
    p = l.primolista();
    while(i <= MAX)
    {
        cout << l.leggilista(p) << "\n";
        p = l.succlista(p);
        i++;
    }
        
    system("PAUSE");
    return EXIT_SUCCESS;
}
il codice di provalistap.cpp è stato fatto per controllare se il codice delle liste funziona.
dov'è l'errore?