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


Anmelden zum Antworten