Crash (Heap Corruption)



  • Ich habe einen Crash (Heap Corruption) welchen ich nicht verstehe:

    HEAP[ShapedMaterialProcessingd.exe]: Heap block at 0211A180 modified at 0211C1AC past requested size of 2024
    Windows has triggered a breakpoint in ShapedMaterialProcessingd.exe.

    This may be due to a corruption of the heap, and indicates a bug in ShapedMaterialProcessingd.exe or any of the DLLs it has loaded.

    The output window may have more diagnostic information
    HEAP[ShapedMaterialProcessingd.exe]: Invalid Address specified to RtlValidateHeap( 00DF0000, 0211A188 )
    Windows has triggered a breakpoint in ShapedMaterialProcessingd.exe.

    msvcr80d.dll!_free_dbg_nolock(void * pUserData=0x0211a1a8, int nBlockUse=1) Line 1279 + 0x30 bytes C++
    msvcr80d.dll!_free_dbg(void * pUserData=0x0211a1a8, int nBlockUse=1) Line 1220 + 0xd bytes C++
    msvcr80d.dll!free(void * pUserData=0x0211a1a8) Line 1178 + 0xb bytes C++
    QtCored4.dll!6703fb6d()
    [Frames below may be incorrect and/or missing, no symbols loaded for QtCored4.dll]
    ShapedMaterialProcessingd.exe!QVector<double>::free(QVectorTypedData<double> * x=0x0211a1a8) Line 425 + 0xc bytes C++
    ShapedMaterialProcessingd.exe!QVector<double>::~QVector<double>() Line 114 + 0x42 bytes C++
    ShapedMaterialProcessingd.exe!PhaseFromPeriod::~PhaseFromPeriod() Line 21 + 0x5a bytes C++
    ShapedMaterialProcessingd.exe!ShapingGrating::~ShapingGrating() Line 26 + 0x29 bytes C++
    ShapedMaterialProcessingd.exe!beamshapes::~beamshapes() Line 43 + 0x8c bytes C++
    ShapedMaterialProcessingd.exe!beamshapes::`vbase destructor'() + 0x1c bytes C++
    ShapedMaterialProcessingd.exe!PhaseObject::~PhaseObject() Line 17 + 0xe bytes C++

    Das passiert wenn die Insanz von der Klasse 'PhaseObject' gelöscht wird. Dabei wird der Destruktor vom Object 'phaseCalibration' aufgerufen

    class ShapingGrating : public virtual BeamShapingBasics
    {
    
    public:
        ShapingGrating();
        virtual ~ShapingGrating();
    
    private:
        PhaseFromPeriod phaseCalibration;
    

    dieser hat einen QVector

    class PhaseFromPeriod
    {
    public:
        virtual ~PhaseFromPeriod(){}
    
    private:
        QVector<double> m_Period;
    

    Wenn nun der Destruktor von 'm_Period' aufgerufen wird crasht die Application.
    Ich haben einen Rebuild schon ausprobiert aber das hat nicht geholfen.

    Was könnte ich ausprobieren ? Development platform ist Windows MSVC.





  • Zeig mal ein wenig mehr Code...

    Oder versuch selbst, erst mal möglichst viel auszukommentieren
    und das so lang, bis es geht - wenn dann alles wieder geht, dann wieder stück für stück dazukommentieren...

    bb



  • Der Fehler (Crash) war immer an einer anderen Stelle.
    Am Ende habe ich festgestellt, dass ich auf ein 1D Array zugegriffen habe, als wäre es ein 2D Array. Das funktionierte so gut, das eine Simulation 30 Minuten durchlaufen konnte ohne einen Fehler.

    Aber sobald die beendet war, und ein erneuter Speicherzugriff irgentwo im Programm erfolgte crashte die Applikation.


Anmelden zum Antworten