diff --git a/clay.h b/clay.h
index 778799e..9463220 100644
--- a/clay.h
+++ b/clay.h
@@ -1570,10 +1570,14 @@ Clay__MeasureTextCacheItem *Clay__MeasureTextCached(Clay_String *text, Clay_Text
         // This element hasn't been seen in a few frames, delete the hash map item
         if (Clay__generation - hashEntry->generation > 2) {
             // Add all the measured words that were included in this measurement to the freelist
-            for (int32_t i = 0; i < hashEntry->measuredWords.length; i++) {
-                uint32_t index = Clay__MeasuredWordArraySlice_Get(&hashEntry->measuredWords, i) - &Clay__measuredWords.internalArray[0];
-                Clay__int32_tArray_Add(&Clay__measuredWordsFreeList, index);
+            if (hashEntry->measuredWords.length > 0) {
+                uint32_t startOffset = hashEntry->measuredWords.internalArray - Clay__measuredWords.internalArray;
+
+                for (int32_t i = 0; i < hashEntry->measuredWords.length; i++) {
+                    Clay__int32_tArray_Add(&Clay__measuredWordsFreeList, (int32_t)(startOffset + i));
+                }
             }
+
             uint32_t nextIndex = hashEntry->nextIndex;
             Clay__MeasureTextCacheItemArray_Set(&Clay__measureTextHashMapInternal, elementIndex, CLAY__INIT(Clay__MeasureTextCacheItem) {});
             Clay__int32_tArray_Add(&Clay__measureTextHashMapInternalFreeList, elementIndex);