diff --git a/src/impls.rs b/src/impls.rs index 4cbd5e6..776d3ec 100644 --- a/src/impls.rs +++ b/src/impls.rs @@ -6,6 +6,7 @@ use std::{ fmt::Debug, mem::size_of, ops::{Deref, DerefMut}, + ptr::NonNull, slice, vec::Vec as StdVec, }; @@ -161,13 +162,21 @@ impl Deref for Vec { type Target = [T]; fn deref(&self) -> &Self::Target { - unsafe { slice::from_raw_parts(self.get_ptr(0), self.len) } + if self.is_empty() { + unsafe { slice::from_raw_parts(NonNull::dangling().as_ptr(), 0) } + } else { + unsafe { slice::from_raw_parts(self.get_ptr(0), self.len) } + } } } impl DerefMut for Vec { fn deref_mut(&mut self) -> &mut Self::Target { - unsafe { slice::from_raw_parts_mut(self.get_ptr(0) as _, self.len) } + if self.is_empty() { + unsafe { slice::from_raw_parts_mut(NonNull::dangling().as_ptr(), 0) } + } else { + unsafe { slice::from_raw_parts_mut(self.get_ptr(0) as _, self.len) } + } } }