【发布时间】:2020-07-02 02:23:52
【问题描述】:
我正在尝试使用 Vulkan 编写一个基本程序,但我不断收到运行时错误。
Exception thrown at 0x00007FFDC27A8DBE (vulkan-1.dll) in VulkanTest.exe: 0xC0000005: Access violation writing location 0x0000000000000000.
这似乎是一个相对常见的问题,由于未能初始化 vkCreateInstance 函数的参数而导致。我已经尝试了我发现向其他人提出的所有解决方案,甚至初始化了我相当确定我不需要的东西,但我仍然无法解决问题。该程序是使用 MSVC 编译器用 C 语言编写的。
#include "stdio.h"
#include "SDL.h"
#include "vulkan\vulkan.h"
#include "System.h"
int main(int argc, char *argv[])
{
//Initialize SDL
if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
{
printf("Error");
}
printf("Success");
//Initialize Vulkan
VkInstance VulkanInstance;
VkApplicationInfo VulkanApplicationInfo;
VulkanApplicationInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
VulkanApplicationInfo.pNext = 0;
VulkanApplicationInfo.pApplicationName = "VulkanTest";
VulkanApplicationInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
VulkanApplicationInfo.pEngineName = "VulkanTest";
VulkanApplicationInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
VulkanApplicationInfo.apiVersion = VK_API_VERSION_1_0;
VkInstanceCreateInfo VulkanCreateInfo = {0,0,0,0,0,0,0,0};
VulkanCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
VulkanCreateInfo.pNext = 0;
VulkanCreateInfo.pApplicationInfo = &VulkanApplicationInfo;
VulkanCreateInfo.enabledLayerCount = 1;
VulkanCreateInfo.ppEnabledLayerNames = "VK_LAYER_KHRONOS_validation";
vkEnumerateInstanceExtensionProperties(0, VulkanCreateInfo.enabledExtensionCount,
VulkanCreateInfo.ppEnabledExtensionNames);
//Create Vulkan Instance
if(vkCreateInstance(&VulkanCreateInfo, 0, &VulkanInstance) != VK_SUCCESS)
{
printf("Vulkan instance was not created");
}
//Create SDL Window
SDL_Window* window;
window = SDL_CreateWindow("VulkanTest", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 0, 0, SDL_WINDOW_VULKAN || SDL_WINDOW_FULLSCREEN_DESKTOP);
SDL_Delay(10000);
return 0;
}
【问题讨论】:
-
表示有一个 NULL 指针。你忘了初始化一些东西吗?在调试器中单步执行以找出该指针应该表示的内容。
-
请用您使用的语言进行标记。不要在 C 问题上抨击 C++。
-
这是一个 c++ 库。我认为这可能是相关的。哪个空指针?我相信有几个。
-
这是 C 代码。标记问题的可见部分。考虑一下:观看标签试图回答 C++ 问题的人会寻找 C++ 代码。
-
ppEnabledLayerNames = "VK_LAYER_KHRONOS_validation"。这是如何运作的?似乎是类型错误。一个是char*,另一个是char**。
标签: c exception graphics vulkan