C++ 如何从vkNumeratePhysicalDevices返回VkPhysicalDevice

C++ 如何从vkNumeratePhysicalDevices返回VkPhysicalDevice,c++,vulkan,C++,Vulkan,我在Vulkan学习一个游戏引擎教程,遇到了一个问题,vkEnumeratePhysicalDevices用指向堆栈的指针填充我的“设备”向量。VkPhysicalDevice似乎是指针VkPhysicalDevice\u T*的类型定义。关于这个问题,我在VisualStudio上收到了一条警告,我想知道是否有办法让函数分配给堆 编辑:在“返回设备[i]”处,我得到警告“C26816:指针指向堆栈上分配的内存。” VkPhysicalDevice VulkanRenderer::selectP

我在Vulkan学习一个游戏引擎教程,遇到了一个问题,vkEnumeratePhysicalDevices用指向堆栈的指针填充我的“设备”向量。VkPhysicalDevice似乎是指针VkPhysicalDevice\u T*的类型定义。关于这个问题,我在VisualStudio上收到了一条警告,我想知道是否有办法让函数分配给堆

编辑:在“返回设备[i]”处,我得到警告“C26816:指针指向堆栈上分配的内存。”

VkPhysicalDevice VulkanRenderer::selectPhysicalDevice(){
U32设备计数=0;
vkEnumeratePhysicalDevices(_实例和设备计数、空PTR);
如果(deviceCount==0){
Logger::Fatal(“未找到支持的物理设备”);
}
std::矢量设备(设备计数);
vkEnumeratePhysicalDevices(_实例和设备计数,devices.data());
对于(U32 i=0;i
我也有这个。它来自于与新的C++指南相关的静态分析。 Vulkan中的可调度句柄类似于指针。不过,现代C++约定不喜欢原始指针。静态分析器似乎错误地认为
std:vector
与该指针下的任何对象的生存期相关联

在编写本文时,此代码似乎避免了静态分析器警告:

const VkPhysicalDevice d = devices[0];
return d;
此外,该警告可以专门静音:

#ifdef _MSC_VER
#pragma warning( suppress: 26816 )
#endif
return devices[0];

你得到了什么“警告”?代码似乎不是问题。@Nicolabolas警告我返回的是堆栈上已分配内存的指针,所以。。。为什么要对此发出警告?请编辑您的帖子以提供确切的警告信息。还有你的编译器编译选项。如果不清楚,很抱歉。我返回由vkEnumeratePhysicalDevices填充的设备[I]。我想知道为什么这个函数会在堆栈上填充,以及是否可以在堆上填充。如果这个函数是要在堆栈上填充的,那么我不明白为什么您仍然没有提供确切的警告消息。您的代码没有“在堆栈上填充”(不管这意味着什么)。你能不能编辑你的问题,复制/粘贴你收到的错误信息,以及一些关于行号的指示?同样,提供编译器构建选项。
#ifdef _MSC_VER
#pragma warning( suppress: 26816 )
#endif
return devices[0];