Pointer Array auf dynamische angelegte Objekte releasen ?
-
Servus,
entweder programmiere ich in einem unbekannten Stil oder aber die meisten Handbücher schweigen sich darüber aus... hilft wohl hoffentlich noch das gute C++ Forum, gg
Der Titel und Beispiel SourceCode sind Programm::
#include <stdio.h> #include <stdlib.h> class Foo { public: Foo() { } Foo(int iQty) { iVariable=(int *)calloc(iQty,sizeof(int)); } ~Foo() { free(iVariable); iVariable=NULL; } int *iVariable; }; int main() { unsigned int ui; class Foo **MyFoo=NULL; (Foo **) MyFoo = (Foo **) new Foo[100]; // 100 Pointer auf Objekte von Foo, Zeile 19 !! for(ui=0;ui<100;ui++) { (Foo *) MyFoo[ui] = (Foo *) new Foo(1000); // 100 Objekte, aufruf des Konstruktor mit 1000 } for(ui=0;ui<100;ui++) { delete MyFoo[ui]; // Löschen des ui.ten Objekts, aufruf des Destruktors MyFoo[ui]=NULL; } delete MyFoo; // Löschen des Pointer Array's auf die Objekte return 0; }
Das Löschen des Pointer Array's auf die Objekte wird mir mit einer Schutzverletzung abgebrochen (Metrowerks), GNU G++ sagt die Deklaration, Definition sagt "main.cpp:line 19: error: non-lvalue in assignment" und der Intel Compiler schluckt es ausnahmslos...
Was ist zu tun ?
Danke Winn
-
Deine Cast sind unnötig und nicht schön. in cpp sollte man ken c cast verwenden
warum g++ nicht nimmt weiss ich leider nicht genau, aber ich glaube man darf leut stanart kein linken werte casten
mfg
-
#include <cstdio> // <--- #include <cstdlib> // <--- class Foo { public: Foo() { } Foo(int iQty) { iVariable=(int *)calloc(iQty,sizeof(int)); } ~Foo() { free(iVariable); iVariable=NULL; } int *iVariable; }; int main() { unsigned int ui; Foo **MyFoo=0; // <--- MyFoo = new Foo*[100]; // <--- for(ui=0;ui<100;ui++) { MyFoo[ui] = new Foo(1000); // <--- } for(ui=0;ui<100;ui++) { delete MyFoo[ui]; // MyFoo[ui]=NULL; // <--- } delete[] MyFoo; // <--- return 0; }
p.s. wozu [m|c]alloc/free?
-
Merci
Hat geholfen... gibt es irgendwelche Vorteile wenn man statt calloc new verwendet ? Performance Vorteile ? Hab alles auf new umgestellt und ich hab das subjektive Empfinden, daß es einen Mini-Tick schneller wurde...
Winn
-
Winn schrieb:
Merci
Hat geholfen... gibt es irgendwelche Vorteile wenn man statt calloc new verwendet ?
Ja, m/c/alloc ist C new ist C++
Winn schrieb:
Performance Vorteile ?
Frag deinen Compiler, kann schon sein, dass er new "besser kann"
-
Hallo,
ein entscheidender Unterschied zwischen new und malloc ist der, dass new noch den Konstruktor aufruft bzw. delete den Destruktor.
-
Und ein entscheidender Unterschied zu calloc, dass calloc alles mit 0 initialisiert.
-
Bashar schrieb:
Und ein entscheidender Unterschied zu calloc, dass calloc alles mit 0 initialisiert.
Grml, wohl wahr... in die Falle bin ich später auch noch getappt... mußte später überall noch Initialisierungs-Routinen einfügen