Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

der debugger (von vc++6.0) bringt mir folgende fehler:

Loaded symbols for 'X:\USER\Jahrgang 2001\Martin Weinitschke\c++\projecte oo kurs\menge\Debug\menge.exe'

Loaded 'C:\WINNT\system32\NTDLL.DLL', no matching symbolic information found.

Loaded 'C:\WINNT\system32\KERNEL32.DLL', no matching symbolic information found.

The thread 0x528 has exited with code 0 (0x0).

in der zeile:

if(pMenge->enthalten_in(pZeiger->nummer)!=true)

aus der emthode:

void CMenge::schneiden_mit(CMenge *pMenge)

{

struct Menge *pZeiger;

pZeiger=pMenge->pAnfang;

while(pZeiger!=NULL)

{

if(this->enthalten_in(pZeiger->nummer)!=true)

{

this->entnehmen(pZeiger->nummer);

}

pZeiger=pZeiger->pNaechster;

}

pZeiger=this->pAnfang;

while(pZeiger!=NULL)

{

if(pMenge->enthalten_in(pZeiger->nummer)!=true)

{

this->entnehmen(pZeiger->nummer);

}

pZeiger=pZeiger->pNaechster;

}

}

Versteh nicht ganz was das soll, hab erst gemeint es ist ein speicherzugriffsfehler, aber da passen die meldungen irgendwie net so dazu...

könnt ihr mir da helfen??? bin am verzweifeln

:confused: :confused: :confused: :confused:

ja sind die sind gültig kann dir auch mal die ganze datei posten - is nur so wenn ich die methode nicht aufrufe, also im hauptprogramm auskomentiere kommen die meldungen nicht.

folgende fehlermeldung hab ich vergessen zu erwähnen:

... der vorgang "read" konnte nicht auf dem speicher durchgeführt werden...

das prog:

// Menge.cpp: implementation of the CMenge class.

//

//////////////////////////////////////////////////////////////////////

#include "Menge.h"

#include "iostream.h"

#include "malloc.h"

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

CMenge::CMenge()

{

}

CMenge::~CMenge()

{

}

void CMenge::init()

{

pAnfang=NULL;

}

void CMenge::vereinigen_mit(CMenge *pMenge)

{

struct Menge *pZeiger;

pZeiger=pMenge->pAnfang;

if(pZeiger!=NULL)

{

do

{

if(this->enthalten_in(pZeiger->nummer)!=true)

{

this->zufuegen(pZeiger->nummer);

}

pZeiger=pZeiger->pNaechster;

}while(pZeiger!=NULL);

}

}

void CMenge::schneiden_mit(CMenge *pMenge)

{

struct Menge *pZeiger;

pZeiger=pMenge->pAnfang;

while(pZeiger!=NULL)

{

if(this->enthalten_in(pZeiger->nummer)!=true)

{

this->entnehmen(pZeiger->nummer);

}

pZeiger=pZeiger->pNaechster;

}

pZeiger=this->pAnfang;

while(pZeiger!=NULL)

{

if(pMenge->enthalten_in(pZeiger->nummer)!=true)

{

this->entnehmen(pZeiger->nummer);

}

pZeiger=pZeiger->pNaechster;

}

}

void CMenge::zufuegen(int nr)

{

struct Menge *pZeiger;

if(enthalten_in(nr)==true)

{

cout<<nr<<" ist schon in Menge enthalten und kann somit nicht hinzugefuegt werden"<<endl;

}

else

{

pZeiger=pAnfang;

if(pAnfang==NULL)

{

pAnfang=(struct Menge*)malloc(sizeof(struct Menge));

pZeiger=pAnfang;

pZeiger->pNaechster=NULL;

pZeiger->nummer=nr;

}

else

{

while(pZeiger->pNaechster!=NULL)

{

pZeiger=pZeiger->pNaechster;

}

pZeiger->pNaechster=(struct Menge*)malloc(sizeof(struct Menge));

pZeiger=pZeiger->pNaechster;

pZeiger->pNaechster=NULL;

pZeiger->nummer=nr;

}

}

}

void CMenge::entnehmen(int nr)

{

struct Menge *pZeiger,*pSpeicher;

if(enthalten_in(nr)==true)

{

pZeiger=pAnfang;

if(pZeiger->nummer==nr)

{

pAnfang=pZeiger->pNaechster;

pSpeicher=pZeiger;

pZeiger->pNaechster=pZeiger->pNaechster->pNaechster;

free(pSpeicher);

}

else

{

while(pZeiger->pNaechster->nummer!=nr)

{

pZeiger=pZeiger->pNaechster;

}

pSpeicher=pZeiger->pNaechster;

pZeiger->pNaechster=pZeiger->pNaechster->pNaechster;

free(pSpeicher);

}

}

else

{

cout<<nr<<" ist nicht enthalten und kann somit auch nicht entfern werden!"<<endl;

}

}

void CMenge::zeige_inhalt()

{

struct Menge *pZeiger;

pZeiger=pAnfang;

cout<<"Inhalt der Menge:"<<endl;

do

{

cout<<pZeiger->nummer<<endl;

pZeiger=pZeiger->pNaechster;

}while(pZeiger!=NULL);

cout<<endl;

}

bool CMenge::enthalten_in(int nr)

{

struct Menge *pZeiger;

bool wert=false;

if (pAnfang!=NULL)

{

pZeiger=this->pAnfang;

do

{

if(pZeiger->nummer==nr)

{

wert=true;

}

pZeiger=pZeiger->pNaechster;

}while(pZeiger!=NULL);

}

return wert;

}

die anderen methoden funktionieren alle, da die eine andere den gleichen zeiger verwendet sollte es daran nicht liegen, oder?

Check doch mal, ob im letzten Element der Kette das Element pNaechster wirklich auf NULL steht oder ob du es vielleicht vergessen hast mit NULL zu initialisieren (und der Zeiger irgendwohin in den Speicher zeigt, was diesen Fehler verursacht)!

Fehlermeldung?

Loaded symbols for 'X:\USER\Jahrgang 2001\Martin Weinitschke\c++\projecte oo kurs\menge\Debug\menge.exe'

Loaded 'C:\WINNT\system32\NTDLL.DLL', no matching symbolic information found.

Loaded 'C:\WINNT\system32\KERNEL32.DLL', no matching symbolic information found.

The thread 0x528 has exited with code 0 (0x0).

Das ist keine Fehlermeldung sondern nur ein Hinweis. Es bedeuted, dass keine Symbolinformationen in den System-DLLS vorhanden sind und du diese nicht debuggen kannst.

Die Letzte Meldung kommt wenn das Programm (oder ein Teil-Thread) beendet wurde.

void CMenge::schneiden_mit(CMenge *pMenge)

{

struct Menge *pZeiger;

pZeiger=pMenge->pAnfang;

while(pZeiger!=NULL)

{

if(this->enthalten_in(pZeiger->nummer)!=true)

{

this->entnehmen(pZeiger->nummer);

}

pZeiger=pZeiger->pNaechster;

}

pZeiger=this->pAnfang;

while(pZeiger!=NULL)

{

if(pMenge->enthalten_in(pZeiger->nummer)!=true)

{

this->entnehmen(pZeiger->nummer); <--- Hier ist der Fehler

}

pZeiger=pZeiger->pNaechster;

}

}

Nach dem Entnehmen zeigt pZeiger auf freigegebenen Speicher, denn genau die Struct mit der angegebenen Nummer hast Du ja gerade aus der Liste entfernt. Der letztendliche Absturz des Programms ist dann wohl ein Folgefehler.

das dürfte es wohl sein! danke dir, wär da glaub ich heut nicht mehr drauf gekommen - probiers glaich mal aus....

ja geht !!!

die methode sieht jetzt so aus:

void CMenge::schneiden_mit(CMenge *pMenge)

{

struct Menge *pZeiger,*pSpeicher;

pZeiger=pMenge->pAnfang;

while(pZeiger!=NULL)

{

pSpeicher=pZeiger->pNaechster;

if(this->enthalten_in(pZeiger->nummer)!=true)

{

this->entnehmen(pZeiger->nummer);

}

pZeiger=pSpeicher;

}

pZeiger=this->pAnfang;

while(pZeiger!=NULL)

{

pSpeicher=pZeiger->pNaechster;

if(pMenge->enthalten_in(pZeiger->nummer)!=true)

{

this->entnehmen(pZeiger->nummer);

}

pZeiger=pSpeicher;

}

}

Ich glaube, ich habe den Code nicht ganz verstanden, weil mir die Deklaration vom Struct Menge fehlt bzw. der Teil vom Code, indem die "Menge" angelegt wird.

Du must doch eine Stelle haben wo du ein oder mehrer Mengen-Structs anlegst. Dann sagst du welches von wem der Nachfolger (pNaechster) ist.

Das was ich eigentlich sagen wollte, ist dass du jedes neu angelegte Struct initialisieren sollst (am besten mit 0 überall)

-----

Aber wenn es jetzt funktioniert dann ist es auch gut - trotzdem denke ich, dass wir aneinander vorbeigeredet haben.

MfG

hier der teil mit dem struct:

class CMenge

{

private:

struct Menge{

int nummer;

struct Menge *pNaechster;

};

struct Menge *pAnfang;

public:

CMenge();

virtual ~CMenge();

void zufuegen(int nr);

void entnehmen(int nr);

bool enthalten_in(int nr);

void zeige_inhalt();

void init();

void schneiden_mit(CMenge *pMenge);

void vereinigen_mit(CMenge *pMenge);

};

@olli:

weiß jetzt nicht genau was du meinst, aber das stichwort lautet "verkettete liste" initialisieren kann ich die soweit ich weiß so gar nicht, da der speicher nach bedarf allokiert wird...

Aber Du könntest der struct Menge einen Konstruktor verpassen, der z.B. pNaechster auf NULL setzt. Wenn Du das nämlich irgendwo vergisst, dann hast Du ein Problem.

Allerdings müsstest Du, damit der auch ausgeführt wird, die neuen Strukturen mit new holen und mit delete freigeben. Aber wenn Du sowieso C++ benutzt, ist das ohnehin empfehlenswert.

@sub7

Das was ich gemeint habe steckt schon in der Zeile

pZeiger->pNaechster=NULL;

der Methode zufuegen(..) drin. Da allokierst du den Speicher mit malloc() und setzt pNaechster auf NULL.

Ich dachte die Zeile hättest du vergessen...

------------------

Jetzt tritt der Fehler ja nicht mehr auf .

Tschüss

axo @ olli

und mit dem konstrukt da mache ich mich morgen drüber ...

danke für die vielen tips :P

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.