Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

03.09.2003, 13:18

operator delete bei dynamischen Arrays

Hallo

Ich habe folgendes Problem: Ich möchte ein dynamisch erzeugtes Array freigeben, ohne dass die Destruktoren der Objekte aufgerufen werden. Also versuche ich es so (Typ ist ein beliebiger Typ):

//erzeugen:
Typ* pTyp=new Typ[10];

//freigeben:
::operator delete(pTyp);

Just beim freigeben des Arrays erhalte ich eine saftige Fehlermeldung, die ungefähr so lautet:

"Assertation Failed!
EXPRESSION: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)"

Warum? Wird denn beim dynamischen erzeugen eines Arrays nicht operator new(sizeof(Typ)*iArrayCount) oder so aufgerufe?

Harre auf Antwort...

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

2

03.09.2003, 14:08

Muss man da nicht den delete[] operator aufrufen!?

Lephro

Frischling

Beiträge: 66

Wohnort: Dortmund

Beruf: Schüler

  • Private Nachricht senden

3

03.09.2003, 14:13

yap den er will ja den Array löschen und um einen Array zu löschen nimmt man delete[]() und nicht delete() oder hab ich da was FALSE mitgekiregt ;) ???

Anonymous

unregistriert

4

03.09.2003, 17:03

Klar, normalerweise würde ich das ja so machen, aber ich möchte ja, das der Destruktor der Objekte, aus denen das Array besteht nicht(!) aufgerufen wird!

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

5

03.09.2003, 17:42

warum das denn?

6

04.09.2003, 01:58

Das kannst du mit delete voll vergessen. Der operator ruft immer die Destruktoren auf. Das ist eine feste vorgabe von C++.

Du kannst den Speicher höchstens mit free freigeben. Allerdings kann man dann nicht garantieren das free() auch das tut wo für es da ist. Die Destruktoren werden in jedem Fall nicht aufgerufen.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige