【发布时间】:2017-01-12 02:20:19
【问题描述】:
我刚刚开始学习 Vulkan。我有 Graham Sellers 的《Vulkan Programming Guide》一书,以及我系统中带有 AMDGPU pro 驱动程序的 RX 480。我正在运行 Arch Linux,并且已经能够在我的系统上运行一些 Vulkan 演示。
我有一个导致分段错误的最小代码块。奇怪的是,在我为了提出这个问题而生成这个块的过程中,我确实让它在从构造函数调用 vkCreateInstance() 的情况下运行,并且当我在我的代码中添加一个 try/catch 时首先注意到一个分段错误。
现在,即使没有 try/catch,这也会导致分段错误:
#include <iostream>
#include <vulkan/vulkan.h>
int main(int argv, char* argc[])
{
VkInstance* instance;
VkApplicationInfo appInfo = { .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
.pNext = NULL,
.pApplicationName = "Step 1",
.applicationVersion = 1,
.pEngineName = NULL,
.engineVersion = 0,
.apiVersion = VK_MAKE_VERSION(1, 0, 26) }; //This is what vulkanCapsViewer says my API version is.
VkInstanceCreateInfo createInfo = { .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pNext = NULL,
.flags = 0 };
createInfo.pApplicationInfo = &appInfo;
createInfo.enabledExtensionCount = 0;
createInfo.ppEnabledExtensionNames = NULL;
createInfo.enabledLayerCount = 0;
createInfo.ppEnabledLayerNames = NULL;
std::cout << "1\n";
VkResult result = vkCreateInstance(&createInfo, NULL, instance);
std::cout << "2\n";
if(result != VK_SUCCESS) std::cout << "Failed to create a Vulkan instance: " << result << std::endl;
std::cout << "3\n";
return 0;
}
输出是:
93> ./create_seg_fault
1
Segmentation fault (core dumped)
【问题讨论】:
-
指定初始化器(还不是)C++ 特性。所以你的代码使用了一些 C 和 C++ 的混合体。