Ist hier nen Speicherleck?
-
class GBase { public: GBase(int bx,int by){x=bx,y=by;} virtual void Align(GBase *gobject) { if(typeid(*this)!=typeid(*gobject)) { cout<<"Fehler beim Ausrichten "<<typeid(*this).name(); cout<<" und "<<typeid(*gobject).name(); cout<<" sind keine gleichen Objecte"<<endl; throw "Ungleiche Elemente"; } else { gobject->x=x; gobject->y=y; } } protected: int x; int y; }; class GBar:public GBase { public: GBar(int tx,int ty,int tt):GBase(tx,ty){t=tt;} private: int t; }; class GCircle:public GBase { public: GCircle(int tx,int ty,int tr):GBase(tx,ty){r=tr;} private: int r; }; int main(int argc, char* argv[]) { GBase* object[3]; object[0] = new GBar(1,2,3); object[1] = new GCircle(2,3,4); object[2] = new GBar(3,4,5); try { object[0]->Align(object[1]); } catch(const char* cg) { cout<<cg; } delete[] object; //bin verwirrt, aber wird der speicher hier richtig freigegeben? getch(); return 0; }siehe kommentar im code!
Warum ich das frage, werde ich nach den antworten erklären...!
-
Ja hier ist ein Memory Leak und es ist falsch wie du es löscht.
Du versuchst das Stackobject zu löschen. Richtig wäre:
for(unsigned i = 0; i < 3; ++i) delete object[i];//Edit: Knallt es eigentlich nicht? Ich meine ob die Anwendung nicht abstürzt... (Das liegt dann nämlich an dem löschen des Arrays das auf dem Stack liegt )
BR
-
evilissimo schrieb:
//Edit: Knallt es eigentlich nicht? Ich meine ob die Anwendung nicht abstürzt... (Das liegt dann nämlich an dem löschen des Arrays das auf dem Stack liegt )
BR
genau, es passiert nix...komisch is nur, das auch CodeGuard bei mir nix meldet....müsste er doch eiegntlich! (BCB 6 Enterprise)!

-
Das zählt dann eben zur Rubrik undefiniertes Verhalten

-
evilissimo schrieb:
Das zählt dann eben zur Rubrik undefiniertes Verhalten

hm....dachte CodeGuard hat das bei mir immer als BadFunction angesprochen...