Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Ist das erlaubt

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.09.2004, 17:29 Uhr
~WIeso
Gast


Eine kurze Frage mit wahrscheinlich langer antwort:
Darf man das?

C++:
int i=2222;
delete &i;


Bei einem Program an der gleichen stelle gibt es keine Problem, bei einem anderen mit der gleichen header datei stürtzt er genau da ab!!??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.09.2004, 17:48 Uhr
0xdeadbeef
Gott
(Operator)


Nein, das darf man natürlich nicht. delete darfst du nur auf Zeiger anwenden, die du vorher mit new angelegt hast. Was geht, ist also:

C++:
int *p = new int;
//...
delete p;


Was widerum nicht geht, ist

C++:
int *p = new int[10];
//...
delete p;


Denn an der Stelle musst du, analog zu new[], delete[] benutzen. Also:

C++:
int *p = new int[10];
//...
delete[] p;


Aus dem selben Grund (nur umgekehrt) geht natürlich auch

C++:
int *p = new int;
//...
delete[] p;


nicht.

C++:
delete NULL;


dagegen ist legal, hat aber keine Auswirkungen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 22.09.2004 um 17:49 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.09.2004, 17:48 Uhr
virtual
Sexiest Bit alive
(Operator)


Nein. delete löscht Objekte auf dem Heap; i liegt aber auf dem Stack
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.09.2004, 21:33 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Da hät ich dann mal ne (erbsenzähler) Frage zu dem new[] und delete:

Wäre es in dem Beispiel mit den ints nicht egal ob man delete oder delete[] verwendet? Soweit ich weiß ruft doch delete[] "nur" die einzelnen Destrukoren auf, oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.09.2004, 22:00 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


theoretisch geht es, kann aber passieren das du da unvorhergesehene ergebnisse bekommst. Deswegen lieber:


Code:
new -> delete
new[] -> delete[]


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.09.2004, 08:48 Uhr
ao

(Operator)



Zitat von Guybrush Threepwood:
Wäre es in dem Beispiel mit den ints nicht egal ob man delete oder delete[] verwendet? Soweit ich weiß ruft doch delete[] "nur" die einzelnen Destrukoren auf, oder?


C++:
int * p = new int [10]; // Array mit 10 Eintraegen anlegen

delete p; // Destruktor wird auf *p (d.h. auf p[0]) angewendet; das ist nicht die ganze Arbeit.

delete [] p; // Destruktor wird auf alle Array-Eintraege angewendet.


Der Unterschied ist, dass bei delete nur das erste Element regulär zerstört wird, bei delete [] alle Elemente.

Bei so einfachen Datentypen wie int, die einen trivialen Destruktor haben, spielt das keine Rolle. Aber wenn man z.B. sowas hier hat, ist es schon wichtiger:

C++:
/* Eine Klasse, die Heapspeicher anfordert, so dass es wichtig ist,
   dass jede Instanz per Destruktor zerlegt wird, weil man sonst
   Speicher verliert. */


class CKlasseMitDynamischemSpeicher {
private:
    char * m_pcMemory;
public:
    CKlasseMitDynamischemSpeicher () { m_pcMemory = new char [1024]; }
    ~CKlasseMitDynamischemSpeicher () { delete [] m_pcMemory; }
};

int main (void)
{
    /* Instanzen erzeugen */
    CKlasseMitDynamischemSpeicher * pkmds = new CKlasseMitDynamischemSpeicher [10];

    /* ..... */

    /* *ALLE* Instanzen wieder zerlegen */
    delete [] pkmds;
    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: