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++; }
ä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
@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
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?
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
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ßbroteDieser Post wurde am 14.12.2003 um 15:06 Uhr von Windalf editiert.