doppelt verkettete Liste



  • Hallo!
    Ich hab ein Problem mit einer doppelt verketteten Liste. Ich krieg irgendiwe immer eine Accesviolation c000005
    Hier mein Code zum Einfügen an das Ende der Liste

    meAnim* ptr;
    
    if(m_AniRoot == NULL)	// Erste Animation?
    {
    	ptr = new meAnim;
    	m_AniRoot = ptr;
    	m_AniRoot->prev = NULL;
    	m_AniRoot->next = NULL;
    	m_AniEnd = m_AniRoot;
    }
    else
    {
    	ptr = new meAnim;
    	m_AniEnd->next = ptr;
    	ptr->prev = m_AniEnd;
    	ptr->next = NULL;
    	m_AniEnd = ptr;
    }
    

    Hier der Code zum löschen eines elementes aus der Liste

    if(ptr->next != NULL) ptr->next->prev = ptr->prev;
    if(ptr->prev != NULL) ptr->prev->next = ptr->next;
    ptr2 = ptr->next;
    delete ptr;
    ptr = ptr2;  // Wird gebraucht, weil die ganze liste durchgegenagen werden soll
    m_NumAnims--;
    if(m_NumAnims == 0) 
    {
    	ptr = NULL;
    	m_AniRoot = m_AniEnd = NULL;
    }
    

    Heir der Code, wo der Fehler kommt:

    while(ptr != NULL)
    {
             // ptr hat hier, wenn kein Element mehr in der Liste ist, den Wert 
    // 0xdddddddd oder so ähnlich, eben der Standardwert, der bei delete gesetzt wird
    	if(RenderAni(ptr, &m_Verts[Cursor]) == ME_ANI_RENDERED)
    	{	
    		Cursor += 6;
    		NumRenderedAnis++;
    	}
    	ptr = ptr->next;
    

    Was kann man da machen?

    }



  • warum nicht std::list?



  • ich brauche so wenig wie möglich overhead.
    Ich denk jetzt mal std::list ist nicht ganz so schnell, wie eine liste ohne std::list

    Ist der Overhead betträchtilich von std::list?



  • Das kann man nicht pauschal sage, hängt von deinem Compiler und deiner STL ab.

    Normalerweise ist std::list aber nicht gerade lahm. 🙂
    Nimm doch einfach std::list; dann testest du mit einem Profiler, ob die Liste zu viel Performance frisst. In dem Fall kannst du immer noch selbst eine Liste schreiben.
    Teste aber wirklich mit einem Profiler. Engstellen im Code raten geht immer schief.



  • OK, ist ja auch einfacher zu machen 🙂

    Danke an alle!


Anmelden zum Antworten