Disable broken aligned_alloc on new versions of macOS and revert to old behaviour.
diff --git a/include/vk_mem_alloc.h b/include/vk_mem_alloc.h
index 3ab71ed..dbaeee9 100644
--- a/include/vk_mem_alloc.h
+++ b/include/vk_mem_alloc.h
@@ -4182,18 +4182,21 @@
 

 static void* vma_aligned_alloc(size_t alignment, size_t size)

 {

-#if defined(__APPLE__) && (defined(MAC_OS_X_VERSION_10_16) || defined(__IPHONE_14_0))

-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_16 || __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_14_0

-    // For C++14, usr/include/malloc/_malloc.h declares aligned_alloc()) only

-    // with the MacOSX11.0 SDK in Xcode 12 (which is what adds

-    // MAC_OS_X_VERSION_10_16), even though the function is marked

-    // availabe for 10.15. That's why the preprocessor checks for 10.16 but

-    // the __builtin_available checks for 10.15.

-    // People who use C++17 could call aligned_alloc with the 10.15 SDK already.

-    if (__builtin_available(macOS 10.15, iOS 13, *))

-        return aligned_alloc(alignment, size);

-#endif

-#endif

+    // Unfortunately, aligned_alloc causes VMA to crash due to it returning null pointers. (At least under 11.4)

+    // Therefore, for now disable this specific exception until a proper solution is found.

+    //#if defined(__APPLE__) && (defined(MAC_OS_X_VERSION_10_16) || defined(__IPHONE_14_0))

+    //#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_16 || __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_14_0

+    //    // For C++14, usr/include/malloc/_malloc.h declares aligned_alloc()) only

+    //    // with the MacOSX11.0 SDK in Xcode 12 (which is what adds

+    //    // MAC_OS_X_VERSION_10_16), even though the function is marked

+    //    // availabe for 10.15. That's why the preprocessor checks for 10.16 but

+    //    // the __builtin_available checks for 10.15.

+    //    // People who use C++17 could call aligned_alloc with the 10.15 SDK already.

+    //    if (__builtin_available(macOS 10.15, iOS 13, *))

+    //        return aligned_alloc(alignment, size);

+    //#endif

+    //#endif

+

     // alignment must be >= sizeof(void*)

     if(alignment < sizeof(void*))

     {