Vulkan 创建逻辑设备时获取访问冲突

Vulkan 创建逻辑设备时获取访问冲突,vulkan,Vulkan,我得到以下错误: VkLayer_khronos_validation.dll上引发异常 在0x00007FF5252DD05(VkLayer\u khronos\u validation.dll)访问冲突读取位置0xFFFFFFFFFFFF处引发异常 我的代码: void LogicalDevice::createLogicalDevice(VkPhysicalDevice pDevice){ VkDeviceQueueCreateInfo qcreateInfo; qcreateInfo.s

我得到以下错误:

VkLayer_khronos_validation.dll上引发异常 在0x00007FF5252DD05(VkLayer\u khronos\u validation.dll)访问冲突读取位置0xFFFFFFFFFFFF处引发异常

我的代码:

void LogicalDevice::createLogicalDevice(VkPhysicalDevice pDevice){
VkDeviceQueueCreateInfo qcreateInfo;
qcreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
QueueFamiliesIndices indices = PhysicalDevice::findQueueFamilies(pDevice);
qcreateInfo.queueFamilyIndex = indices.graphicsFamily.value();
qcreateInfo.queueCount = 1;
float queuePriority = 1.0f;
qcreateInfo.pQueuePriorities = &queuePriority;

VkPhysicalDeviceFeatures deviceFeatures = {};

VkDeviceCreateInfo createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
createInfo.pQueueCreateInfos = &qcreateInfo;
createInfo.queueCreateInfoCount = 1;
createInfo.pEnabledFeatures = &deviceFeatures;

createInfo.enabledExtensionCount = 0;

if (ValidationLayers::enableValidationLayers){
     createInfo.enabledLayerCount = static_cast<uint32_t>(ValidationLayers::validationLayers.size());
     createInfo.ppEnabledLayerNames = ValidationLayers::validationLayers.data();

}
else{
     createInfo.enabledLayerCount = 0;
     createInfo.pNext = nullptr;
}
createInfo.flags = 0;

if (vkCreateDevice(pDevice, &createInfo ,nullptr, &device) != VK_SUCCESS){
    std::cout << "Failed to create Logical Device";
}
void LogicalDevice::createLogicalDevice(VkPhysicalDevice pDevice){
VkDeviceQueueCreateInfo qcreateInfo;
qcreateInfo.sType=VK\u结构\u类型\u设备\u队列\u创建\u信息;
QueueFamiliesIndexes=PhysicalDevice::findQueueFamilies(pDevice);
qcreateInfo.queueFamilyIndex=index.graphicsFamily.value();
qcreateInfo.queueCount=1;
浮动队列优先级=1.0f;
qcreateInfo.pqueePriorities=&queuePriority;
VkPhysicalDeviceFeatures deviceFeatures={};
VkDeviceCreateInfo createInfo={};
createInfo.sType=VK\u结构\u类型\u设备\u创建\u信息;
createInfo.pQueueCreateInfos=&qcreateInfo;
createInfo.queueCreateInfoCount=1;
createInfo.pEnabledFeatures=&deviceFeatures;
createInfo.enabledExtensionCount=0;
if(ValidationLayers::enableValidationLayers){
createInfo.enabledLayerCount=static_cast(ValidationLayers::ValidationLayers.size());
createInfo.ppEnabledLayerNames=ValidationLayers::ValidationLayers.data();
}
否则{
createInfo.enabledLayerCount=0;
createInfo.pNext=nullptr;
}
createInfo.flags=0;
如果(vkCreateDevice(pDevice、createInfo、nullptr和device)!=VK_成功){

std::cout未初始化
VkDeviceQueueCreateInfo
。未初始化指针(
pNext
)会导致错误的指针取消引用。它发生在调试模式下,因为它使用调试内存模式。在发布模式下,未初始化值通常为0


在Vulkan的C绑定中处理此问题的一个典型方法是使用
{}
结构进行零初始化;
。或者C99和C++20中有指定的初始值设定项。对于大多数Vulkan参数,零是一个不错的默认值。

请不要发布代码图片。复制代码并将其粘贴到代码块中抱歉,我是stackoverflow新手,我已更改了它。请更清楚地了解您希望的异常仅在调试中生成时发生所以,我想我的验证层有一些问题,但是验证层在其他情况下正常工作。我不知道是什么触发了这个异常。我想你应该澄清一下{}初始化东西,因为上面的用户可能不认为这是一个重要的步骤。当然,为什么不呢。这甚至不是Vulkan特有的问题,我希望这是一个打字错误。任何与Vulkan打交道的人都应该已经对C/C++或编程有了良好的处理能力…通过{}进行零初始化即使教的也只适用于vulkan的C结构,没有合适的构造函数。你可以在C++中用C++编程来完成整个生命,而在5年里我第一次遇到这个结构,这绝对不是典型的。好,迟做比不好:P。虽然未初始化的值是基本知识,
{}
修复只是一种方法,基本上是我们基于意见的建议。