From 3bd5a24dbe7452175ac3cd745ef9193ca4e0b5a1 Mon Sep 17 00:00:00 2001 From: Tomo Sasaki Date: Mon, 1 Sep 2025 02:12:55 -0400 Subject: [PATCH] Fix delta_x usage in msipddp_solver Compute delta_x before using it to avoid using stale reference after workspace_.delta_x_vectors[t] is reassigned. --- src/cddp_core/msipddp_solver.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/cddp_core/msipddp_solver.cpp b/src/cddp_core/msipddp_solver.cpp index 1da5d13..19eafa3 100644 --- a/src/cddp_core/msipddp_solver.cpp +++ b/src/cddp_core/msipddp_solver.cpp @@ -1858,8 +1858,9 @@ namespace cddp { for (int t = 0; t < horizon; ++t) { - const Eigen::VectorXd &delta_x = workspace_.delta_x_vectors[t]; - workspace_.delta_x_vectors[t] = result.state_trajectory[t] - context.X_[t]; + // Compute delta_x first before using it + Eigen::VectorXd delta_x = result.state_trajectory[t] - context.X_[t]; + workspace_.delta_x_vectors[t] = delta_x; result.control_trajectory[t] = context.U_[t] + alpha * k_u_[t] + K_u_[t] * delta_x; @@ -1946,8 +1947,9 @@ namespace cddp bool s_trajectory_feasible = true; for (int t = 0; t < horizon; ++t) { - const Eigen::VectorXd &delta_x = workspace_.delta_x_vectors[t]; - workspace_.delta_x_vectors[t] = result.state_trajectory[t] - context.X_[t]; + // Compute delta_x first before using it + Eigen::VectorXd delta_x = result.state_trajectory[t] - context.X_[t]; + workspace_.delta_x_vectors[t] = delta_x; // Update slack variables first for (const auto &constraint_pair : constraint_set)