summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-08-08 21:55:36 -0400
committerJonathan Bradley <jcb@pikum.xyz>2023-08-08 22:00:36 -0400
commit0e49a248c94c55b918eb5ebc4224a75735cfba9c (patch)
tree6bb99f9d0d407154a70b7103b037fd377e853754 /src
parent1d3bfd616e1b00c0510d9ac00e6e9ee6b6daab83 (diff)
memory assert bucket and check the ptr itself
Diffstat (limited to 'src')
-rw-r--r--src/memory.cpp3
-rw-r--r--src/memory.hpp1
2 files changed, 3 insertions, 1 deletions
diff --git a/src/memory.cpp b/src/memory.cpp
index abaea00..716c6a6 100644
--- a/src/memory.cpp
+++ b/src/memory.cpp
@@ -42,6 +42,7 @@ void *pke::PkeNew(std::size_t sz) {
}
void pke::PkeDelete(const void *ptr, std::size_t sz, pke::MemBucket *bkt) {
+ assert(ptr >= bkt->ptr && ptr < bkt->ptr + bkt->size && "pointer not in bucket range");
bkt->allocs--;
bkt->free += sz;
if (ptr == bkt->ptr + bkt->head - sz) bkt->head -= sz;
@@ -55,7 +56,7 @@ void pke::PkeDelete(const void *ptr, std::size_t sz) {
pke::MemBucket *bkt = nullptr;
for (long i = 0; i < bucketHead; ++i) {
bkt = &buckets[i];
- if (ptr > bkt->ptr && ptr < bkt->ptr + bkt->size) break;
+ if (ptr >= bkt->ptr && ptr < bkt->ptr + bkt->size) break;
}
if (bkt == nullptr) {
std::printf("bad pointer %llu", reinterpret_cast<unsigned long long>(ptr));
diff --git a/src/memory.hpp b/src/memory.hpp
index fe93cc7..2a244f6 100644
--- a/src/memory.hpp
+++ b/src/memory.hpp
@@ -4,6 +4,7 @@
#include <cstdint>
#include <cstdlib>
#include <cstdio>
+#include <cassert>
#define DEFAULT_BUCKET_SIZE 1UL << 27