Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » dynamisch erzeugte Klasse löschen

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 < [ 2 ]
000
13.12.2003, 17:12 Uhr
~nAvi
Gast


Ich hab einige Objekte eine Klasse dynamisch erzeugt, kann sie aber nich mehr löschen (bekomme jdesmal einen Fehler). Vielleicht könnt ihr mal schauen was falsch ist (ich habs mal vereinfacht):

C++:

class A
{
private:
public:
};

A *einA[];

while(x<height*width)
    {
    einA[x] = new Value();
    x++;
    }

delete einA; // geht nicht
delete einA[]; // geht nicht

while(x<height*width) // geht auch nicht
        {
         delete einA[x];
         x++;
         }

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.12.2003, 17:26 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


äh sieht ein wenig wüst aus.
kannst du mal den komplette quellcode posten...
das verkürzt bestimmt einige erklärungen und ich kann mir vermutungen ersparen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.12.2003, 17:29 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ich würde mal sagen, das kann nciht gehen, da du einen etwas seltsamen pointer definierst
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.12.2003, 17:53 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@Flo
an dem code scheint mir fast alles seltsam...
Deshalb wollte ich mal den kompletten sehen oder noch besser wäre zu wissen was der da überhaupt veranstallten will...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.12.2003, 11:30 Uhr
~nAvi
Gast


was ist an dem Quellcode bitte komisch?
Der original Quellcode ist zu gross zum posten. Mir geht es nur darum, wie ich ein Feld von Objekten erzeuge und wieder lösche. Da ich aber vorher nicht wiess wie gross dass Feld ist muss ichs ja wohl oder übel dynamisch machen. Und das oben war mein Ansatz der aber nicht geht. Was wäre zum Beispiel wenn ich schreibe:

C++:

A *einA[];

einA[height*width] = new A();




Geht das oder ist das auch falsch.
Und wenn es geht wie lösch ich das wieder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.12.2003, 11:53 Uhr
~keiner
Gast


hallo,

delete einA; // geht nicht
delete einA[]; // geht nicht

---
delete [] einA; // geht 100%
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.12.2003, 12:43 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ich bin mir nicht sicher ob ich weiss was du willst....
meinst du das in der art?

C++:
A **einA;
int i;

//pointerarray von A's der grösse height*width
einA = new A*[height*width];   //wenn height*width zur Laufzeit schon feststehen kann man sich das dynamische allokieren hier ersparen es schadet aber auch nicht..

for(i=0;i<height*width;++i) //für jeden pointer des arrays
einA[i] = new A(.....); //hier erzeugst du für jeden pointer ein Objekt mit dem dafür passenden Konstruktor;

//mit dem krempel arbeiten

//am ende wieder freigeben
for(i=0;i<height*width;++i) //für jeden pointer des arrays
delete einA[i]; //hier wird konkret ein object gelöscht/deallokiert und kein array deshalb ohne []
delete [] einA; //speicher für pointerarray freigeben


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
14.12.2003, 14:37 Uhr
~nAvi
Gast


Wenn ich das also so mach:

C++:

einA = new A*[height*width];




und ich des mit


C++:

delete [] einA;




wieder lösche, löscht er dann nur das Pointerfeld oder auch die Objekte?
Weil das wäre genau das was ich brauche (wenn er die Objekte löscht)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.12.2003, 15:05 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
for(i=0;i<height*width;++i)  delete einA[ i ]; //hier wird jedes object gelöscht
delete [] einA; //hier wird das pointerarray gelöscht.
//wenn du das pointerarray frei gibst bevor du die objecte freigibst bekommst du speicherlöcher....also erst die objecte wieder freigeben oder ggf einem anderen pointer übergeben und nicht einfach nur das pointerarray löschen


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 14.12.2003 um 15:06 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
16.12.2003, 16:34 Uhr
~nAvi
Gast


Das obige funktioniert jetzt wunderbar also vielen Dank soweit. Jetzt bräucht ich aber ein zweidimensionales Feld von Objekten. Ich habs so versucht:

C++:
A ** einA;

einA = new A*[height][width];



Des geht aber net.
Wie mach ich des nun?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: