Doppelpointer-Feld
-
Hallo!
Ich habe die beiden Klassen CScene und CSphere.
In CScene befindet sich u.a. folgendes:CSphere** pSpheres; // Liste aller Kugeln // (Pointer zeigt auf Startfeld der Pointer, die auf die Kugel-Instanzen zeigen) unsigned int uiNumSpheres; // Speichert die Anzahl der Kugeln void CScene::addSphere(const CSphere& spr) { pSpheres[uiNumSpheres] = new CSphere(spr); uiNumSpheres++; }
Das Problem liegt anscheinend in addSphere().
Ist diese Konstruktion mit Doppelpointern nicht "erlaubt"?Der GNU-Compiler von Dev-C++ gibt mir beim Kompilationsvorgang keinen Fehler aus, beendet das Programm aber sofort mit einem Fehler (wahrscheinlich wegen unerlaubten Speicherzugriffes).
-
Wo wird denn der Speicher für pSpheres reserviert?
-
Wahrscheinlich ist das der Punkt.
Wie reserviere ich Speicher dafür?
-
pSpheres = new CSphere*[Anzahl];
Wahrscheinlich ist das aber nicht der Punkt. addSphere deutet ja eher daraufhin, dass die Anzahl beliebig sein kann. In diesem Fall empfiehlt es sich std::vector oder std::list zu nehmen.
std::vector<CSphere*> spheres; void CScene::addSphere(const CSphere& spr) { spheres.push_back( new CSphere( spr)); }
Du sparst dann auch Deine Variable uiNumSpheres.
-
Danke, das wollte ich wissen.
Werde dann auf vector umsteigen.mfg,
C++ Junkie