2 Fragen zu new und delete
-
1. Frage:
Wenn ich eine klasse "was_weiß_ich" erstelle und dynamisch ein Array dieser Klasse anlege.was_weiß_ich *t = new was_weiß_ich(1000);Ruft man delete dann so auf?
delete [1000] t;Ist das richtig?
(Es fehlt doch irgendwie die Information für den Compiler, wie groß eigentlich ein element der Klasse "was_weiß_ich" ist, oder nicht?)2. Frage:
Ist folgendes rekursive Programm in Ordnung oder wird irgendwelcher Speicher nicht freigegeben?#include <iostream.h> class rekursionstest { public: static long* rek(long *Wert) { if (*Wert>1) { *Wert=*Wert-1; long *t = new long(*Wert); rek(t); delete(Wert); return t; } return Wert; } }; int main(void) { long *wert= new long(1000); rekursionstest::rek(wert); return 1; }
-
Zu 1.:
delete [] t;Der Compile weiss, wieviel dort allociert wurde.
Zu 2: sieht auf den ersten Blick gut aus.
-
MisterX schrieb:
was_weiß_ich *t = new was_weiß_ich(1000);Ruft man delete dann so auf?
delete [1000] t;Ist das richtig?
Ich hoffe die runden Klammern sind nur Schreibfehler. Für ein Array müssen es jedenfalls eckige Klammern sein.
MisterX schrieb:
(Es fehlt doch irgendwie die Information für den Compiler, wie groß eigentlich ein element der Klasse "was_weiß_ich" ist, oder nicht?)
Was heisst hier element der Klasse "was_weiß_ich"? Ich dachte, du willst ein Array erstellen, wo was_weiß_ich selbst der Elementtyp ist.
MisterX schrieb:
Ist folgendes rekursive Programm in Ordnung
Nur mal ein paar Kritikpunkte
- iostream.h ist unnötig sowie veraltet
- C++ bedeutet nicht, Funktionen in Klassen zu stecken
- dein Speicherhandling ist fehlerhaft
- es ist in C++ üblich, Funktionen ohne Parameter mit leeren Klammern zu schreiben, also ohne void
-
Müsste galub so hier stehen:
was_weiß_ich *t = new(was_weiß_ich[1000]); // --> Besorgt Speicher für 1000 was_weiß_ich Elemente
delte[] was_weiß_ich; // Gibt den Speicher wieder Frei. Ist wichtig, wenn du mit großen Datenmengen Programmierst.
-
delete [1000] t;gab es nur im uralten AT&T 2.0 C++ Standard, als C++ noch keine Templates etc. hatte.
Seit AT&T 3.0 reicht auch
delete [] t;
-
Tc++H schrieb:
Ist wichtig, wenn du mit großen Datenmengen Programmierst.

-
Tc++H schrieb:
Müsste galub so hier stehen:
was_weiß_ich *t = new(was_weiß_ich[1000]); // --> Besorgt Speicher für 1000 was_weiß_ich Elemente
delte[] was_weiß_ich; // Gibt den Speicher wieder Frei. Ist wichtig, wenn du mit großen Datenmengen Programmierst.
Was hat das mit der Datenmenge zu tun.

-
dein programm enthält einen kleinen fehler:
soll wohl
t=rek(t);anstelle von
rek(t);heißen
