Exception bei Übergabe eines Pointer von einem Panel
-
Hallo zusammen,
mein Problem hat wohl nicht unbedingt was mit wxWidgets zu tun, aber ich weiss nicht in welches Forum ich das sonst posten soll.
Ich benutze hier VS Express 2008 mit wxWidgets 2.8.12.
Meine Anwendung hat ein Panel (DavePanel) das über MainPanel(wxFormbuilder) von wxPanel abgeleitet ist. Dann habe ich eine unabhängige Klasse, CLogger, welche über die serielle Schnittstelle in einem bestimmten Zeitraster Daten abfragt und diese an DavePanel weiterleiten soll. Dort werden die Daten beispielsweise in einem Datagrid dargestellt. Dort sind auch zwei Buttons, um die Aufzeichnung zu starten und zu stoppen. Und außerdem kann CLogger auch nach einer bestimmten Zeit das Logging stoppen. CLogger muss also Daten an DavePanel weiterleiten, und auch die dort implementierte Funktion "OnStopLogging" aufrufen können.
Dazu hat CLogger eine Variable (DavePanel *m_pCaller;
) und eine Funktion
void SetCaller(DavePanel *obj){m_pCaller = obj;}
.
DavePanel wiederum hat eine VariableCLogger m_pLogger;
Der Aufruf in DavePanel sieht so aus:
m_pLogger->SetCaller(this);
Und genau bei diesem Aufruf bekomme ich eine Exception. Woran kann das liegen ?
Wenn ich mir mit dem Debugger einmal beim Aufruf und einmal bei der aufgerufenen Funktion das "obj" anschaue, dann sind die Speicheradressen identisch .........
-
Öhm wie den nu ist m_pLogger ein Pointer oder eine konkrete Instance?
Denn Definition der variable und verwendung sind da unterschiedlich.
Wie schaut es mit der addresse von m_pLogger aus?
-
Husky schrieb:
Und genau bei diesem Aufruf bekomme ich eine Exception.
Könntest du dann nicht die exakte Meldung hier rein stellen? Dein geposteter Code ist so minimal, dass man daraus nicht wirklich Rückschlüsse auf den Fehler machen kann.
Serielle Schnittstelle auslösen hört sich nach eigenem Thread an. Ich denke nicht, dass wxWidgets die Gui-Zugriffe Locked - bei verändernden Zugriffen auf die Gui aus einem anderen als dem Hauptthread kann das böde Fehler auslösen.
-
Beim ersten Hinweis (statisch oder dynamisch) habe ich gemerkt, dass m_pLogger zwar als Pointer definiert ist, aber im Konstruktor der Panel-Klasse hatte ich noch gar keinen Speicherplatz dafür angelegt
m_pLogger = new CLogger();
Kein Wunder.
Danke für die Hinweise