From 15be5cbf1fac91a2dc73242ef944c583dd5844ae Mon Sep 17 00:00:00 2001 From: Prateek Machiraju Date: Wed, 20 Jan 2021 23:38:45 -0500 Subject: [PATCH] [examples] Fix segfault in GearsBot C++ example (#3111) This fixes a dangling this pointer in the DriveStraight and SetDistanceToBox commands by directly capturing the drivetrain pointer by value instead. --- .../cpp/examples/GearsBot/cpp/commands/DriveStraight.cpp | 4 ++-- .../cpp/examples/GearsBot/cpp/commands/SetDistanceToBox.cpp | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/wpilibcExamples/src/main/cpp/examples/GearsBot/cpp/commands/DriveStraight.cpp b/wpilibcExamples/src/main/cpp/examples/GearsBot/cpp/commands/DriveStraight.cpp index 4e1ea8f405..6163372237 100644 --- a/wpilibcExamples/src/main/cpp/examples/GearsBot/cpp/commands/DriveStraight.cpp +++ b/wpilibcExamples/src/main/cpp/examples/GearsBot/cpp/commands/DriveStraight.cpp @@ -11,8 +11,8 @@ DriveStraight::DriveStraight(double distance, DriveTrain* drivetrain) : frc2::CommandHelper( frc2::PIDController(4, 0, 0), - [this]() { return m_drivetrain->GetDistance(); }, distance, - [this](double output) { m_drivetrain->Drive(output, output); }, + [drivetrain] { return drivetrain->GetDistance(); }, distance, + [drivetrain](double output) { drivetrain->Drive(output, output); }, {drivetrain}), m_drivetrain(drivetrain) { m_controller.SetTolerance(0.01); diff --git a/wpilibcExamples/src/main/cpp/examples/GearsBot/cpp/commands/SetDistanceToBox.cpp b/wpilibcExamples/src/main/cpp/examples/GearsBot/cpp/commands/SetDistanceToBox.cpp index 31864fb96f..18e9a414b3 100644 --- a/wpilibcExamples/src/main/cpp/examples/GearsBot/cpp/commands/SetDistanceToBox.cpp +++ b/wpilibcExamples/src/main/cpp/examples/GearsBot/cpp/commands/SetDistanceToBox.cpp @@ -11,8 +11,9 @@ SetDistanceToBox::SetDistanceToBox(double distance, DriveTrain* drivetrain) : frc2::CommandHelper( frc2::PIDController(-2, 0, 0), - [this]() { return m_drivetrain->GetDistanceToObstacle(); }, distance, - [this](double output) { m_drivetrain->Drive(output, output); }, + [drivetrain] { return drivetrain->GetDistanceToObstacle(); }, + distance, + [drivetrain](double output) { drivetrain->Drive(output, output); }, {drivetrain}), m_drivetrain(drivetrain) { m_controller.SetTolerance(0.01);