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

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

Hab ich schon versucht. Aber wie muss ich das schreiben?

Ich allokiere nur an der Stelle speicherplatz mit new, sonst nirgends.

Bine

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]

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

Das mit dem '\0' hab ich schon geändert gehabt bevor Klotzkopp das geschrieben hat. Aber es funktioniert trotzdem irgendwie nicht.

Bine

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

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.

Wer lesen kann ist klar im Vorteil.

Hast Recht.

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.