diff --git a/src/scheduler/MemoryManager.cpp b/src/scheduler/MemoryManager.cpp
index 05f461b82f16b6af4ed412b7336aa2328bcafbe1..8e35913f4832f0e54e26f9be286943eb25f498ba 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 eba195ad967983c08ca7247bd5ef2f37362dfa70..fa57f76db63fb345259d8bf585fef708b1d44a31 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,