Fixed budget management in VmaBlockVector::Allocate for cases when some of multi-page allocations fail
diff --git a/src/SparseBindingTest.cpp b/src/SparseBindingTest.cpp
index 4299db1..ce4d2db 100644
--- a/src/SparseBindingTest.cpp
+++ b/src/SparseBindingTest.cpp
@@ -547,7 +547,7 @@
 

     RandomNumberGenerator rand(4652467);

 

-    for(uint32_t i = 0; i < frameCount; ++i)

+    for(uint32_t frameIndex = 0; frameIndex < frameCount; ++frameIndex)

     {

         // Bump frame index.

         ++g_FrameIndex;

@@ -562,11 +562,11 @@
         images.push_back(std::move(imageInfo));

 

         // Delete all images that expired.

-        for(size_t i = images.size(); i--; )

+        for(size_t imageIndex = images.size(); imageIndex--; )

         {

-            if(g_FrameIndex >= images[i].endFrame)

+            if(g_FrameIndex >= images[imageIndex].endFrame)

             {

-                images.erase(images.begin() + i);

+                images.erase(images.begin() + imageIndex);

             }

         }

     }

diff --git a/src/vk_mem_alloc.h b/src/vk_mem_alloc.h
index 3a7ae8d..39d7034 100644
--- a/src/vk_mem_alloc.h
+++ b/src/vk_mem_alloc.h
@@ -12773,9 +12773,13 @@
     if(res != VK_SUCCESS)

     {

         // Free all already created allocations.

+        const uint32_t heapIndex = m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);

         while(allocIndex--)

         {

-            Free(pAllocations[allocIndex]);

+            VmaAllocation_T* const alloc = pAllocations[allocIndex];

+            const VkDeviceSize allocSize = alloc->GetSize();

+            Free(alloc);

+            m_hAllocator->m_Budget.RemoveAllocation(heapIndex, allocSize);

         }

         memset(pAllocations, 0, sizeof(VmaAllocation) * allocationCount);

     }