Нарушение доступа при вызове vkcreateinstance ()?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Нарушение доступа при вызове vkcreateinstance ()?

Сообщение Anonymous »

Я написал простую программу Vulkan: < /p>

Код: Выделить всё

VkResult GetLayersAndExtensions() {
#ifndef NDEBUG
GraphicsBase::GetInstance().AddInstanceLayer("VK_LAYER_KHRONOS_validation");
GraphicsBase::GetInstance().AddInstanceExtension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
#endif
uint32_t instanceExtensionCount = 0;
const char **instanceExtensionNames = nullptr;
instanceExtensionNames = glfwGetRequiredInstanceExtensions(&instanceExtensionCount);
if (!instanceExtensionNames) {
LOGE(TAG_GLFW, "get instance extensions failed");
glfwTerminate();
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
for (uint32_t index = 0; index < instanceExtensionCount; ++index) {
LOGI(TAG_GLFW, "instance extension {}: {}", index, instanceExtensionNames[index]);
GraphicsBase::GetInstance().AddInstanceExtension(instanceExtensionNames[index]);
}
GraphicsBase::GetInstance().AddDeviceExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
return VK_SUCCESS;
}

VkResult CreateInstance() {
VkApplicationInfo applicationInfo = {
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
.apiVersion = _apiVersion
};
VkInstanceCreateInfo createInfo = {
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pApplicationInfo = &applicationInfo,
.enabledLayerCount = static_cast(_instanceLayers.size()),
.ppEnabledLayerNames = _instanceLayers.data(),
.enabledExtensionCount = static_cast(_instanceExtensions.size()),
.ppEnabledExtensionNames = _instanceExtensions.data()
};
VkResult result = vkCreateInstance(&createInfo, nullptr, &_instance);
if (result) {
LOGE(TAG_COMMON, "create vulkan instance failed, result is {}", std::to_string(result));
return result;
}
return VK_SUCCESS;
}
... но он сбои, когда я вызываю vkcreateinstance () :

Код: Выделить всё

Exception thrown at 0x00007FFA10473741 (VkLayer_khronos_validation.dll) in learnvulkan.exe: 0xC0000005: Access violation writing location 0x00000000040D20A0.
< /code>
Стек вызовов выглядит следующим образом: < /p>
VkLayer_khronos_validation.dll!mi_page_map_set_range(mi_page_s * idx, unsigned __int64 sub_idx, unsigned __int64 slice_count, unsigned __int64) Line 266    C++
VkLayer_khronos_validation.dll!_mi_page_map_register(mi_page_s * page) Line 294 C++
VkLayer_khronos_validation.dll!mi_arenas_page_alloc_fresh(mi_subproc_s * subproc, unsigned __int64 slice_count, unsigned __int64 block_size, unsigned __int64 block_alignment, mi_arena_s * req_arena, unsigned __int64 tseq, int numa_node, bool commit) Line 709  C++
VkLayer_khronos_validation.dll!mi_arenas_page_regular_alloc(mi_heap_s * heap, unsigned __int64 slice_count, unsigned __int64 block_size) Line 727   C++
VkLayer_khronos_validation.dll!mi_page_fresh_alloc(mi_heap_s * heap, mi_page_queue_s * pq, unsigned __int64 block_size, unsigned __int64 page_alignment) Line 305   C++
VkLayer_khronos_validation.dll!mi_page_queue_find_free_ex(mi_heap_s * heap, mi_page_queue_s * pq, bool first_try) Line 809  C++
VkLayer_khronos_validation.dll!mi_find_page(mi_heap_s * heap, unsigned __int64 size, unsigned __int64 huge_alignment) Line 929  C++
VkLayer_khronos_validation.dll!_mi_malloc_generic(mi_heap_s * heap, unsigned __int64 size, bool zero, unsigned __int64 huge_alignment) Line 965 C++
VkLayer_khronos_validation.dll!mi_heap_alloc_new(mi_heap_s * heap, unsigned __int64 size) Line 531  C++
Я пробовал удалить Vulkan, но это не работает.


Подробнее здесь: https://stackoverflow.com/questions/797 ... teinstance
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»