### Godot version

master CI builds

### System information

Linux / Editor with doubles and GCC sanitizers

### Issue description

The `Linux / Editor with doubles and GCC sanitizers` build can fail with a `attempting free on address which was not malloc()-ed` crash in the `Open and close editor (Vulkan)` step.

https://github.com/godotengine/godot/actions/runs/5366302204/jobs/9735786296#step:15:138
https://github.com/godotengine/godot/actions/runs/5389199469/jobs/9783070708?pr=78740#step:15:138

The failure doesn't seem related to either PR (in fact one of them is just a docs change). I have only seen this issue these two times, still probably worth looking into.

### Steps to reproduce

Open and close https://github.com/godotengine/regression-test-project/archive/4.0.zip using the Vulkan renderer.

### Minimal reproduction project

https://github.com/godotengine/regression-test-project/archive/4.0.zip
_load_pipeline_cache();
	print_verbose(vformat("Startup PSO cache (%.1f MiB)", pipelines_cache.buffer.size() / (1024.0f * 1024.0f)));
	VkPipelineCacheCreateInfo cache_info = {};
	cache_info.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO;
	cache_info.pNext = nullptr;
	cache_info.flags = 0;
	cache_info.initialDataSize = pipelines_cache.buffer.size();
	cache_info.pInitialData = pipelines_cache.buffer.ptr();
	VkResult err = vkCreatePipelineCache(device, &cache_info, nullptr, &pipelines_cache.cache_object);
	if (err != VK_SUCCESS) {
		WARN_PRINT("vkCreatePipelinecache failed with error " + itos(err) + ".");
	}
}
void RenderingDeviceVulkan::_load_pipeline_cache() {
	if (!DirAccess::exists("user://vulkan/")) {
		Ref<DirAccess> da = DirAccess::create(DirAccess::ACCESS_USERDATA);
		if (da.is_valid()) {
			da->make_dir_recursive("user://vulkan/");
		}
	}
	if (FileAccess::exists("user://vulkan/pipelines.cache")) {
		Error file_error;
		Vector<uint8_t> file_data = FileAccess::get_file_as_bytes("user://vulkan/pipelines.cache", &file_error);
		if (file_error != OK || file_data.size() <= (int)sizeof(PipelineCacheHeader)) {
			WARN_PRINT("Invalid/corrupt pipelines cache.");
			return;
		}
		PipelineCacheHeader header = {};
		memcpy((char *)&header, file_data.ptr(), sizeof(PipelineCacheHeader));
		if (header.magic != 868 + VK_PIPELINE_CACHE_HEADER_VERSION_ONE) {