void DLinkedList::removeName(const Elem& name) {
 DNode * node = header;
 if (node != NULL) {
     do {
         if(node->elem == name){
             node->prev->next = node->next;  
             node->next->prev = node->prev;
             delete node;
         }
         node = node->next;
     } while (node != header); // Stop when we reach the head again.
 }
}
私はそれをデバッガーに投げ込み、if(node->elem == name) を約 3 回通過した後、よくわからない理由でクラッシュしました。