in precedenza non avevo allocato la memoria ma avevo dichiarato temp e l'avevo inizializzato a testa ma mi crashava comunque. poi ho provato ad allocare la memoria ma il risultato non cambia.
Ma stai provando a caso? :dubbioso
Allocare memoria per cosa? Qual'è lo scopo di quella allocazione?

codice:
template<class tipoelem>
void codap<tipoelem>::fuoricoda()
{
   if(!this->codavuota())
   {
      nodop<tipoelem> *tmp=testa;
      testa = testa->getprec();
      testa->setsuc(NULL);
   }
   else
      cerr << "la coda e' vuota.\n\n";
}
Ma rimane un problema: non stai deallocando i nodi che vengono estratti.
Però non capisco in che riga il programma va in crash.
Dici che va in crash dopo l' istruzione "delete temp", ma in tutto il codice che hai postato non esegui dichiari mai "delete tmp".
Posta anche il codice del main.