Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo!

Ich habe mal wieder eine Frage! Ich habe hier einen Auszug aus einem meiner Programme. Damit erzeuge ich dynamisch eine Liste, und auch Speicherplatz für ein Wort.

Wie muss ich den Destruktor definieren, um den Speicherbereich wieder frei zu geben?

Auszug:

		fFound = verifyChar(szWord, nNumber);
if(fFound!=true) // kam das Wort noch nicht vor
{
m_pEndChar->next = new caElementChar;
m_pEndChar = m_pEndChar->next;
m_pEndChar->Filenumber.add(nNumber);
m_pEndChar->pszWord = new char[(strlen(szWord))];
strcpy(m_pEndChar->pszWord, szWord);
cout << m_pEndChar->pszWord << endl;
m_pEndChar->next = NULL;
}[/PHP]

Destruktor:

[PHP]caCharacterList::~caCharacterList() // Destruktor
{
?????
}

Bine

Geschrieben

Im Destruktor von caElementChar musst Du pszWord freigeben. In caCharacterList hast Du wahrscheinlich einen Zeiger auf das erste Element der Liste. Dann sieht der Destruktor in etwa so aus:

caCharacterList::~caCharacterList
{
while( m_pFirst /*oder wie der bei Dir heißt*/ ) {
caElementChar* pHelp = m_pFirst->next;
delete m_pFirst;
m_pFirst = pHelp;
}
}[/PHP]

Geschrieben

Was Klotzkopf schreibt ist ganz, ganz wichtig! Am Ende eines char Arrays wird noch '\0' angehängt. Wenn man dafür keinen Speicherplatz reserviert kann alles passieren. Es kann sein, daß das Programm funktioniert, es kann sein, daß das Programm bei ersten Aufruf abstürzt oder es kann irgendwann abstürzen. Im Allgemeinen ist so ein Problem unter Umständen sehr häßlich zu debuggen. Ansonsten geht Klotzkopf bei seiner Lösung durch die Liste und gibt jedes einzelne Element frei, wobei er sich den Zeiger auf das nächste Element merkt, damit er dann dieses Element frei geben kann und so weiter und so fort...

HTH

Jan

Geschrieben

Ich denke mal in der von Klotzkopf vorgeschlagenen Lösung fehlt noch ein

delete m_pFirst->pszWord[];

vor dem delete m_pFirst;

Um den Speicher für das CHaracterarray freizugeben.

Hoagi

Geschrieben
Original geschrieben von hoagi

Ich denke mal in der von Klotzkopf vorgeschlagenen Lösung fehlt noch ein

delete m_pFirst->pszWord[];

vor dem delete m_pFirst;

Ich denke, das gehört, wie ich es oben auch beschrieben habe, eher in den Destruktor von caElementChar. Dann braucht man sich nicht an jeder Stelle, wo so ein Objekt freigegeben wird, um den internen Aufbau der Struktur/Klasse zu kümmern.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...