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.
-
Hast du es mal mit _CrtCheckMemory oder dem Application Verifier probiert?
http://blog.m-ri.de/index.php/2008/10/27/vs-tipps-tricks-heap-bugs-finden-teil-1/ (unten sind Links zu Teil 2+3)
http://blog.m-ri.de/index.php/2007/03/02/der-application-verifier-mein-neuer-freund/
-
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.