### Segmentation Faults, need help tracking a few down

Hello! I've written a simple Queue list with a linked list format. Unfortunately, I am getting several seg faults that I can't seem to track down.

Here is my Queue.h, where I believe they reside:

 ``123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153`` ``````#ifndef QUEUE_H #define QUEUE_H #include "Node.h" #include "QueueException.h" using namespace std; template class Queue { public: Node* head; Node* current; int cnt; Queue(); Queue(T data); Queue(const Queue &rhs); const Queue & operator=(const Queue &rhs); ~Queue(); void enqueue(T data); T dequeue() throw (QueueException); T front() throw (QueueException); bool isEmpty(); }; template Queue::Queue() { head = NULL; current = NULL; cnt = 0; } template Queue::Queue(T data) { head = new Node(data,NULL); current = head; cnt = 1; } template Queue::~Queue() { Node* curr = head; while(current != NULL) { Node* next = curr->next; delete curr; curr = next; } head = NULL; } template Queue::Queue(const Queue &rhs) { cnt = rhs.cnt; head = NULL; if (rhs.head != NULL) { head = new Node(rhs.head->getData()); Node* curr = head; Node* otherCurr = rhs.head->getNext(); while(otherCurr != NULL) { curr->setNext(new Node(otherCurr->getData())); curr = curr->getNext(); otherCurr = otherCurr->getNext(); } } } template bool Queue::isEmpty() { if(cnt == 0) { return 1; } else { return 0; } } template T Queue::front() throw(QueueException) { if(cnt == 0) { throw QueueException(); } return head->data; } template T Queue::dequeue() throw (QueueException) { T toRemove; toRemove = head->getData(); head = head->getNext(); cnt--; return toRemove; } template void Queue::enqueue(T newdata) { if(head != NULL) { current = head; while(current->getNext() != NULL) { current = current->getNext(); } Node* newinsert = new Node(newdata, NULL); current->setNext(newinsert); } else { Node* newinsert = new Node(newdata, NULL); head = newinsert; } cnt++; } template const Queue& Queue::operator=(const Queue &rhs) { cnt = rhs.cnt; head = NULL; if (rhs.head != NULL) { head = new Node(rhs.head->getData()); Node* curr = head; Node* otherCurr = rhs.head->getNext(); while(otherCurr != NULL) { curr->setNext(new Node(otherCurr->getData())); curr = curr->getNext(); otherCurr = otherCurr->getNext(); } } } #endif ``````

I know I need to learn to track these down myself, but I'm at my wit's end with these. Unfortunately, this block of code is a bit of an amalgamation of snippets from several previous programs (generic linked list template and its accompanying Node class).