From 6e4671ef4af2a6c01a59bcaec92fe6c1f2bd2d04 Mon Sep 17 00:00:00 2001
From: NAUD Maxence <maxence.naud@cea.fr>
Date: Wed, 26 Feb 2025 12:40:38 +0000
Subject: [PATCH] fix 'possibly dangling reference to a temporary' message

---
 src/scheduler/MemoryManager.cpp | 2 +-
 src/scheduler/Scheduler.cpp     | 6 ++++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/scheduler/MemoryManager.cpp b/src/scheduler/MemoryManager.cpp
index 05f461b82..8e35913f4 100644
--- a/src/scheduler/MemoryManager.cpp
+++ b/src/scheduler/MemoryManager.cpp
@@ -572,7 +572,7 @@ Aidge::MemoryManager::getPlanes(const std::shared_ptr<Node>& node) const
     const std::map<std::shared_ptr<Node>, std::vector<MemoryPlane> >
         ::const_iterator it = mMemPlanes.find(node);
 
-    if (it == mMemPlanes.end()) {
+    if (it == mMemPlanes.cend()) {
         AIDGE_THROW_OR_ABORT(std::runtime_error,
             "getSize(): no memory allocated for node name {}", node->name());
     }
diff --git a/src/scheduler/Scheduler.cpp b/src/scheduler/Scheduler.cpp
index eba195ad9..fa57f76db 100644
--- a/src/scheduler/Scheduler.cpp
+++ b/src/scheduler/Scheduler.cpp
@@ -591,7 +591,8 @@ Aidge::MemoryManager Aidge::Scheduler::generateMemory(bool incProducers, bool wr
                             node->name(), node->type());
 
                         const bool isWrappable = (requiredProtected.data < requiredData.data);
-                        const MemoryManager::MemoryPlane& memPlane = memManager.getPlanes(parent.first).end()[-parent.first->nbOutputs()+parent.second];
+                        const auto& memPlanes = memManager.getPlanes(parent.first);
+                        const MemoryManager::MemoryPlane& memPlane = memPlanes.at(memPlanes.size() - parent.first->nbOutputs() + parent.second); // use at() to avoid dangling reference pointer
 
                         if (isWrappable || !memManager.isWrapAround(
                                     memPlane.memSpace,
@@ -759,10 +760,11 @@ Aidge::MemoryManager Aidge::Scheduler::generateMemoryAutoConcat(bool incProducer
                                 node->name(), node->type());
 
                             const bool isWrappable = (requiredProtected.data < requiredData.data);
+                            const auto& memPlanes = memManager.getPlanes(parent.first);
                             const MemoryManager::MemoryPlane& memPlane
                                 = (concat && itConcat != concatMemPlane.end())
                                     ? itConcat->second
-                                    : memManager.getPlanes(parent.first).end()[-parent.first->nbOutputs()+parent.second];
+                                    : memPlanes.at(memPlanes.size()-parent.first->nbOutputs()+parent.second); // use at() to avoid dangling reference pointer
 
                             if (isWrappable || !memManager.isWrapAround(
                                         memPlane.memSpace,
-- 
GitLab