### 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
binary_data.fragment_output_mask = spirv_data.fragment_output_mask;
		binary_data.specialization_constants_count = spirv_data.specialization_constants.size();
		binary_data.is_compute = spirv_data.is_compute;
		binary_data.compute_local_size[0] = spirv_data.compute_local_size[0];
		binary_data.compute_local_size[1] = spirv_data.compute_local_size[1];
		binary_data.compute_local_size[2] = spirv_data.compute_local_size[2];
		binary_data.set_count = spirv_data.uniforms.size();
		binary_data.push_constant_size = spirv_data.push_constant_size;
		for (uint32_t i = 0; i < SHADER_STAGE_MAX; i++) {
			if (spirv_data.push_constant_stages_mask.has_flag((ShaderStage)(1 << i))) {
				binary_data.push_constant_vk_stages_mask |= shader_stage_masks[i];
			}
		}
		for (const Vector<SpirvReflectionData::Uniform> &spirv_set : spirv_data.uniforms) {
			Vector<RenderingDeviceVulkanShaderBinaryDataBinding> set_bindings;
			for (const SpirvReflectionData::Uniform &spirv_uniform : spirv_set) {
				RenderingDeviceVulkanShaderBinaryDataBinding binding{};
				binding.type = (uint32_t)spirv_uniform.type;
				binding.binding = spirv_uniform.binding;
				binding.stages = (uint32_t)spirv_uniform.stages_mask;
				binding.length = spirv_uniform.length;
				binding.writable = (uint32_t)spirv_uniform.writable;
				set_bindings.push_back(binding);
			}
			uniform_info.push_back(set_bindings);
		}
		for (const SpirvReflectionData::SpecializationConstant &spirv_sc : spirv_data.specialization_constants) {
			RenderingDeviceVulkanShaderBinarySpecializationConstant spec_constant{};
			spec_constant.type = (uint32_t)spirv_sc.type;
			spec_constant.constant_id = spirv_sc.constant_id;