in precedenza non avevo allocato la memoria ma avevo dichiarato tem e l'avevo inizializzato a testa ma mi crashava comunque. poi ho provato ad allocare la memoria ma il risultato non cambia.

i metodi getprec ecc ecc sono nella classe nodop.h che non ho postato. dato che funzionano correttamente ho pensato non fosse necessario postare anche quella classe.
posto anche la classe nodop.h

nodop.h
codice:
#ifndef nodop_h
#define nodop_h

#include<iostream>
#include<stdlib.h>

using namespace std;

template<class tipoelem>
class nodop
{
   public:
      nodop();
      
      void setprec(nodop *);
      void setelem(tipoelem);
      void setsuc(nodop *);
      
      nodop *getprec();
      tipoelem getelem();
      nodop *getsuc();
   private:
      nodop *precedente;
      tipoelem elemento;
      nodop *successivo;
};
#endif

template<class tipoelem>
nodop<tipoelem>::nodop()
{
   precedente = NULL;
   elemento = 0;
   successivo = NULL;
}

template<class tipoelem>
void nodop<tipoelem>::setprec(nodop *prec)
{
   precedente = prec;
}

template<class tipoelem>
void nodop<tipoelem>::setelem(tipoelem elem)
{
   elemento = elem;
}

template<class tipoelem>
void nodop<tipoelem>::setsuc(nodop *suc)
{
    successivo = suc;
}

template<class tipoelem>
nodop<tipoelem> *nodop<tipoelem>::getprec()
{
   return(precedente);
}

template<class tipoelem>
tipoelem nodop<tipoelem>::getelem()
{
   return(elemento);
}

template<class tipoelem>
nodop<tipoelem> *nodop<tipoelem>::getsuc()
{
   return(successivo);
}