Nadi: lineare Liste wieder löschen

Hi,

habe mir nun mal eine eigene Liste geschrieben und scheitere gerade bei der Funktion zum Freigeben der Elemente/Liste:

void delusers(user * any_existing_user)
{
 user * puser=0;
 if(any_existing_user==0)
  return;
 while(any_existing_user->pnext!=0)
 {
  any_existing_user=any_existing_user->pnext;
 }
 do
 {
  if(any_existing_user->ppredecessor!=0)
   puser=any_existing_user->ppredecessor;
  any_existing_user=any_existing_user->ppredecessor;
  delete any_existing_user;
  any_existing_user=puser;
 }
 while(puser!=0);
 return;
}

Erstellt wird jedes Element mit (wobei beim ersten die 0 als Parameter übergeben wird):

user *insuser(user * any_existing_user)
{
 if(any_existing_user!=0)
  while(any_existing_user->pnext!=0)
  {
   any_existing_user=any_existing_user->pnext;
  }
 user * puser=new user;
 puser->ppredecessor=any_existing_user;
 if(puser->ppredecessor!=0)
 {
  puser->ppredecessor->pnext=puser;
 }
 puser->pnext=0;
        //do some initialisations
 return puser;
};

und die Struktur user beinhaltet u.a. pnext und ppredecessor.
Leider will mir der Compiler nichts genaueres verraten, aber es gibt irgendein Speicherproblem, wenn ich mehr als 1 User erstellt habe. Das Problem tritt beim Löschen auf.
Sehr ihr irgendeinen Fehler (ungeachtet, dass manches nicht sehr effizient umgesetzt wurde).

Hoffe auf eure Tipps.
Danke vielmals im Voraus

  1. Hi Nadi!
    Ne doppelt vertkettete Liste also...

    do                                      //alle nodes von hinten
    {
      if(any_existing_user->ppredecessor!=0) //hat der letzte node einen Vorgängernode?
       puser=any_existing_user->ppredecessor;//dann setze puser auf den Vorgängernode
      any_existing_user=any_existing_user->ppredecessor; //setze nun auch any_existing_user auf seinen Vorgängernode *
      delete any_existing_user; //löschen nun den Vorgängernode , auf diesen zeigen derzeit puser und any_existing_user, somit werden diese Pointer ungültig.
      any_existing_user=puser; //setze any_existing_user auf puser
    }
    while(puser!=0);
    return;
    }

    Ich hoffe meine Kommentare konnten dir helfen; ist * notwendig?

    Grüsse,
    Richard