N-tes Element in einer einfach-verketteten Liste löschen...



  • Hi,

    Also ich möchte ein beliebig positioniertes Element in einer einfach verketteten Liste löschen.

    Mein Code sieht bisher so aus:

    void CList::Delete(unsigned int uiPos)
    	{
    		if(!uiPos)
    		{
    			CEntry* pTemp = _pFirst;
    			_pFirst = _pFirst->_pNext;
    			delete pTemp;
    		}
    		else
    		{
    			CEntry *pCell = _pFirst,
    					  *pNext = NULL;
    			for(unsigned int uiCount = 0; pCell != NULL; pCell = pNext, uiCount++)
    			{
    				pNext = pCell->_pNext;
    				if(uiCount == uiPos)
    				{
    					CEntry* pTemp = pCell;
    					pCell = pCell->_pNext;
    					delete pTemp;
    					break;
    				}
    			}
    		}
    	}
    

    Das Problem ist, das er beim Abbauen des Objekts (also beim Aufruf des Destruktors) immer abstürtzt (Speicherzugriffsverletzung). Genauer: Beim delete.

    Der Destruktor sieht so aus:

    CList::~CList(void)
    	{
    		CEntry *pCell = _pFirst,
    				  *pNext = NULL;
    		for( ; pCell != NULL; pCell = pNext)
    		{
    			pNext = pCell->_pNext;
    			delete pCell;
    		}
    	}
    

    Ich hoffe ihr könnt mir helfen, danke schonmal 😉 .



  • Es muss eher so sein:

    prev->next = pcell->next;
    

Anmelden zum Antworten