首页 > 解决方案 > 从函数修改时,char * 数组不再有效 (C99)

问题描述

在 Vulkan 中,但这更像是一个 c99 问题,我以这种方式创建我的扩展列表:

const char *extension_list[7];
uint32_t extension_count = 0;

extension_list[ extension_count++ ] = VK_KHR_SWAPCHAIN_EXTENSION_NAME;
extension_list[ extension_count++ ] = VK_KHR_MAINTENANCE1_EXTENSION_NAME;

然后我可以用这个扩展数组调用 vkCreateDevice 并计数:

VkDeviceCreateInfo desc;
desc.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
desc.enabledExtensionCount = extension_count;
desc.ppEnabledExtensionNames = extension_list ;
// (...)
vkCreateDevice( physical_device, &desc, NULL, &vk.device );

我需要从函数 addOtherExt() 添加其他扩展。(我简化了代码,只显示了我的问题,但我有几个扩展要添加。)

  void addOtherExt( const char *list[], uint32_t *count )
  {
    list[ *count ] = VK_KHR_MAINTENANCE1_EXTENSION_NAME;
    *count += 1;
  }

除了函数调用之外,代码是相同的:

extension_list[ extension_count++ ] = VK_KHR_SWAPCHAIN_EXTENSION_NAME;
addOtherExt( extension_list, &extension_count );

vkCreateDevice 没有返回错误,但我收到了消息“无法找到入口点 vkAcquireNextImageKHR”的崩溃。

我打印了数组 extension_list,它看起来与没有功能的版本完全一样(添加了扩展名),并且 extension_count 是正确的。我怀疑终止 '\0' 但没有设法使其工作。

标签: arraysstringc99

解决方案


推荐阅读