bei push_back: Unbehandelte Ausnahme...Access Violation



  • in .h

    struct F3DmedSPointProperty{
        double m_adPoint[3];       //Koordinaten des Punktes
        bool m_bOnEdge;          //Auf Modellface-Kante oder nicht
        bool m_bDone;	   //Bearbeitet
        int m_nModelFaceIndex; //Welche Face vom Modell
        int m_nCutFaceIndex;   //Weche Face des Schnittmodells
    };
    
    vector<F3DmedSPointProperty> m_PointProperties;
    

    in .cpp

    F3DmedSPointProperty pointProperty;
    
    //Das klappt: pointProperty nimmt Werte auf
    this->ArrangeProperties(nTempPoints, false, false,
    	nModelFaceIndex, nCutFaceIndex, pointProperty);
    //Das nicht mehr: Es sollen bebiebig viele pointProperty aufgenommn werden
    m_PointProperties.push_back(pointProperty);
    

    bei push_back: Unbehandelte Ausnahme...Access Violation
    eigentlich kommt bei: "m_PointProperties.egal_was" diese Meldung



  • Möglicherweise ist vorher irgendwo ein underflow-Fehler aufgetretten, zu viel pop_back aufgerufen?



  • Apropos, Variablen definiert man in der cpp-Datei und nicht im Header, falls es sich um eine globale Variable handelt. 😉



  • Also ich würde Pointer vom Typ F3DmedSPointProperty aufnehmen und keine Objekte vom Stack.

    vector<F3DmedSPointProperty*> m_PointProperties;
    

    Und dann die Points im Heap anlegen:

    F3DmedSPointProperty *pointProperty = new F3DmedSPointProperty;
    
    // blabla
    
    try
    {
       m_PointProperties.push_back(pointProperty);
    }
    catch(...)
    {
       std::cout << "Fehler beim hinzufügen von pointProperty\n";
    }
    


  • entweder hast du irgend wo den Vector oder gleich den ganzen Heap geschrottet. Ein Tool wie Valgrind hilft dir ansonsten weiter.

    Oder mach mal ein assert(m_PointProperties.size()); for jedes pop_back oder so was

    @Shlo
    das m_ Prefix deutet ja einen Member an 🙂

    @Artchi
    wieso?


Anmelden zum Antworten