005
17.06.2010, 08:31 Uhr
ao
(Operator)
|
Zitat von ~Holger1981: |
1. dynamic_cast<className*>(unknownObject) liefert !NULL, wenn unknownObject vom Typ className ist. Ich hatte eigentlich gedacht, das sollte hier ausreichen.
|
Aber das muss doch an der Stelle immer klappen. Was anderes als cMessage*-Objekte kann doch in dem Array gar nicht drinstehen, außer du hast es mit Gewalt reingecastet.
Außerdem testest du damit die RTTI, also nur Typ-Information. Die Integrität der Instanz kann trotzdem beschädigt sein.
Zitat: |
2. cMessage hat einen char* "name", den man mit ->setName(string/const char*) beschreiben kann. Das sollte hier aber nicht das Problem sein, da es bei den geschedulten cMessages auch kein Problem ist.
|
Na ja, möglicherweise passiert aber bei den nicht-scheduled Messages irgendwas, was sie kaputt oder halbkaputt zurücklässt und was beim endgültigen delete zurückschlägt. Verpointerte Speicherbereiche gehören da zu den ersten Verdächtigen.
Zitat: |
3. Was Debugger angeht, so bin ich KOMPLETT unfähig
|
Dann solltest du das zuerst lernen. Am besten jetzt sofort. Und dann sehen, ob von den anderen Problemen überhaupt noch was übrigbleibt.
An einem kaputten Programm Debuggen zu lernen, ist nicht gerade die ideale Ausgangsposition. Also bau dir zuerst ein Minimalprogramm, das ein paar Messages erzeugt, schedulet und wieder zerstört, ohne abzustürzen, und üb daran den Umgang mit dem Debugger. Die wichtigsten Funktionen sind Step, StepInto, Watch und Break, um die zu beherrschen brauchst du allerallerhöchstens einen halben Tag. Und wenn du das begriffen hast, dann gehste auf das eigentliche Problem los.
Zitat: |
Ich überlege die ganze Zeit, ob ich die Löschung irgendwie umgehen kann ...
|
Ich glaube, die Löschung ist nicht das Problem, sondern nur die Stelle, wo es sich zeigt. Der Fehler passiert woanders. Dieser Post wurde am 17.06.2010 um 08:59 Uhr von ao editiert. |