diff --git a/src/lib.rs b/src/lib.rs
index 9b7a0398e436a805d8b4b79082ff7aeef8a62fce..7ebc3e564514550bc1b72afc768e8f12e6689e8c 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -138,12 +138,13 @@ where
             Err(Error::Uninitialized)
         } else {
             interrupt_free(|| unsafe {
-                let index = *self.head.get_mut_unchecked();
-                *self.head.get_mut_unchecked() =
-                    *self.free.get_mut_unchecked().get_unchecked(index);
-                if *self.head.get_mut_unchecked() > S {
+                if *self.head.get_mut_unchecked() >= S {
                     Err(Error::OutOfMemory)
                 } else {
+                    let index = *self.head.get_mut_unchecked();
+                    *self.head.get_mut_unchecked() =
+                        *self.free.get_mut_unchecked().get_unchecked(index);
+
                     Ok(Box {
                         index,
                         allocator: self,