Std::map Pointer (Speicherzugriffsfehler)
-
Hallo,
vorweg gesagt: Ich bin ein C++ Anfänger also seit nicht böse mit mir, wenn das banale Fehler sind, die man eig können sollte.
Ich bin jetzt am Weiterentwickeln unseres Projektes in C++:
https://github.com/THOMAS-Projekt/THOMAS/blob/ArduinoKommunikation/MotorControl.cpp#L246In dieser Zeile habe ich folgendes eingefügt:
// Heartbeat case 3: { _lastHeartbeat->operator[](1) = 123456; break; }Diese funktion (ComputeClientCommand) wird von der TCPServer Klasse in einem seperaten Thread ausgeführt. Ich möchte jetzt, allerdings in die _lastHeartbeat std::map den aktuellen Timestamp eintragen (Die Zahl ist nur zu Testzwecken).
Ich habe die Map auch im Header als Pointer definiert, da es sonst einen terminate called after throwing an instance of 'std::system_error' Fehler gibt. (habe dort _lastHeartbeat[0] = 123456 verwendet, da -> nicht auf einem non-pointer funktioniert):
// Heartbeat-Timestamp Map std::map<int, unsigned long> *_lastHeartbeat;Wenn ich jetzt versuche mit ->operator[](1) = 123456; den Wert zu setzten gibt es nur einen Speicherzugriffsfehler.
Ich habe es auch bereits mit mutex->lock() versucht, da es ein anderer Thread ist, allerdings half dies auch nicht.
Hat irgendeiner eine Idee?
-
Es gibt normalerweise keinen Grund, std::map in einen pointer zu packen.
Wenn doch, dann sollte man nicht
_lastHeartbeat->operator[](1)sondern
(*_lastHeartbeat)[1]schreiben.
EDIT: Wenn man nicht genau weiss, was man tut, oder nicht begruenden kann, warum man es genau so macht und nicht anders, sollte man sich mit multithreading gar nicht erst beschaeftigen.
-
Wenn ich es ohne Pointer im Header definiere, bekomme ich folgende Fehlermeldung
terminate called after throwing an instance of 'std::system_error' what(): Invalid argument Abgebrochen (Speicherabzug geschrieben)Edit:// Liest du meinen Thread überhaupt?: Ich zietiere: "Ich bin jetzt am Weiterentwickeln unseres Projektes in C++:" , d.h ich habe es nicht geschrieben mit den Threads, sondern lerne jetzt C++ um es weiter führen zu können. Scheinbar dürfen Anfänger ja keine Fragen stellen, um sich "fortzubilden". Wenn ich es wüsste, dann würde ich auch kein Forum aufsuchen, um diese Frage zu stellen.
-
Waishon schrieb:
Scheinbar dürfen Anfänger ja keine Fragen stellen, um sich "fortzubilden". Wenn ich es wüsste, dann würde ich auch kein Forum aufsuchen, um diese Frage zu stellen.
Marthog will dich nur darauf hinweisen, daß du vielleicht zuerst C++ lernen und dich mit der STL beschäftigen solltest, bevor du dich an ein bestehendes Projekt wagst.
-
Ja, danke

Hatte es falsch interpretiert, sorry. Ich denke ich werde mir ein Buch/PDF kaufen/downloaden und das mal durchgehen. Es ist ja nicht so, dass ich keine Erfahrung im Programmieren habe, ich beherrsche sowohl PHP und Java sehr gut, allerdings verzweifel ich gerade an diesem einen Problem (und C++ ist speziell im Vergleich zu Java und PHP :D) Die ArduinoProtocol.cpp hatte ich auch schon mit wenigen C++ Erfahrungen geschrieben.
Wäre also trotzdem toll, wenn einer mir sagen könnte wo das Problem liegt bzw ein Hinweis

-
Mache die map ohne Pointer und schaue mit einem Debugger, wo die Exception geworfen wird.