Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [c++] Problem mit Liste (https://www.delphipraxis.net/106295-%5Bc-%5D-problem-mit-liste.html)

fwsp 8. Jan 2008 17:22


[c++] Problem mit Liste
 
Liste der Anhänge anzeigen (Anzahl: 1)
hallo,

ich mache grad meine ersten ernsthaften schritte in c++ und versuche eine einfach verlinkte liste zu erstellen. leider zerschiesst mir meine remove methode die ganze liste. das zu löschende element wird nicht gelöscht und auf einen anderen wert gesetzt und die liste wird demontiert. ich benutz Visual Express 2008, und die IDE gibt folgenden Fehler aus:
Code:
Unhandled exception at 0x004119a9 in myList.exe: 0xC0000005: Access violation reading location 0xfeeefeee.
kann mir jmd meinen fehler zeigen?
danke.

my_list.h
Code:
class my_list
{
private:
   struct node
   {
      int data;
      node *next;
   } *head;

public:
   my_list();
   int count();
   void insert(int e);
   void remove(int e);
   void show_all();
}
my_list.cpp
Code:
#include <STDIO.h>
#include <iostream>
#include "my_list.h"

;using namespace std;

my_list::my_list()
{
   head = new node;
   head->next = NULL;
}

void my_list::insert(int e)
{
   node *newitem, *runner;

   runner = head;
   while (runner->next != NULL)
      runner = runner->next;

   newitem = new node;
   newitem->data = e;
   newitem->next = NULL;
   runner->next = newitem;
}

void my_list::remove(int e)
{
   node *runner, *tmp;
   runner = head;

   while (runner->next != NULL)
   {
      if (runner->next->data == e)
      {
         tmp = runner->next;
         runner = runner->next->next;
         delete tmp;
         return;
      }
      else
         runner = runner->next;
   }
}
main.cpp
Code:
#include <iostream>
#include "my_list.h"

;using namespace std;

int main()
{
   my_list list;

   for (int i = 0; i < 100; i++)
      list.insert(i);

   list.show_all();
   cout << list.count() << endl;

   list.remove(5);
   list.show_all();

   getchar();
   return EXIT_SUCCESS;
}

OregonGhost 8. Jan 2008 17:31

Re: [c++] Problem mit Liste
 
Auf Anhieb finde ich den Fehler nicht, aber zwei Tipps:
1. 0xfeeefeee deutet auf nicht initialisierten Speicher hin, oder in deinem Fall auf einen nichtinitialisierten Zeiger.
2. Der Debugger ist dein Freund, meistens ist es gerade bei solchen Dingen recht einfach, damit den Ablauf zu verfolgen. Eventuell hilft es dir hier schon, bei der Exception einfach etwas aufwärts auf dem Stack zu wandern und zu gucken, wo du mal einen ungültigen Zeiger dereferenzierst.

Vielleicht steckt dein Fehler in Zeile 37, willst du eventuell statt
Code:
runner = runner->next->next;
eigentlich
Code:
runner->next = runner->next->next;
machen?

Edit: Semikolon ergänzt
Noch was zu
Code:
#include <STDIO.h>
1. Lieber gleich auf Groß-/Kleinschreibung achten. Sonst kompiliert dein Programm unter Unix nicht.
2. In C++ haben die C-Header keine Endung, dafür ein c als Präfix. Also:
Code:
#include <cstdio>
3. cstdio + iostream solltest du zusammen normalerweise nicht brauchen.

fwsp 8. Jan 2008 17:33

Re: [c++] Problem mit Liste
 
erstaunlich, jetzt funktiniert es. danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz