Ich verwende den folgenden Code in einer ROS-Anwendung.
%Vor% Wenn ich den obigen Code ausführe, führt das zu einem SIGSEGV. Ich habe versucht, den Code zu debuggen und als ich den Konstruktor des RobotisControllers erreiche, finde ich, dass die Variable, die an den Konstruktor nh
übergeben wird, cannot access memory
anzeigt, aber der Speicher ist bereits in der Klasse RosWrapper zugewiesen.
Die Member-Variablen werden in der Reihenfolge der Deklaration in der Klassendefinition initialisiert. Das heißt nh_
wird nach controller_
initialisiert. Übergeben Sie also ein nicht initialisiertes nh_
, da das Argument zum Initialisieren von controller_
zu UB führt.
Sie können die Reihenfolge der Deklaration ändern:
%Vor%