将const char *分配给const char **后,我遇到了一个错误

安德科特

这是我的代码:

const char* sdl_extensions;
const char** sdl_extensions_list;
if (!SDL_Vulkan_GetInstanceExtensions(p_window, &sdl_extension_count, &sdl_extensions)) 
{   
    printf("sdl_extension_count = %i\n", sdl_extension_count);
    printf("[ERROR]: SDL_Vulkan_GetInstanceExtensions _2\n");
    exit(0);
}
else
{
    for(int i = 0; i < sdl_extension_count; i++)
    {
        printf("sdl_extension_%i = %s\n", i, *(&sdl_extensions + i));
    }

    sdl_extensions_list = &sdl_extensions;
    
    for(int i = 0; i < sdl_extension_count; i++)
    {
        printf("sdl_extension_%i = %s\n", i, *(&sdl_extensions + i));
    }
}

这里是输出:

sdl_extension_count = 2
sdl_extension_0 = VK_KHR_surface
sdl_extension_1 = VK_KHR_xlib_surface
sdl_extension_0 = VK_KHR_surface
sdl_extension_1 = diz?�

为什么在行``sdl_extensions_list =&sdl_extensions; ''之后出现错误的输出(sdl_extension_1 = diz ?.)?

谢谢!

一些程序员哥们

从阅读SDL_Vulkan_GetInstanceExtensions文档,你需要传递的是指针数组SDL_Vulkan_GetInstanceExtensions,然后函数初始化的指针。

上述文档中的示例还显示您需要调用SDL_Vulkan_GetInstanceExtensions 两次:首先获取元素计数;第二次获取元素计数。创建阵列后,再次获取实际列表。

在C中执行此操作的代码将如下所示:

unsigned int count;
SDL_Vulkan_GetInstanceExtensions(window, &count, NULL);

const char **extensions = malloc(sizeof(const char *) * count);

SDL_Vulkan_GetInstanceExtensions(window, &count, extensions);

for (size_t i = 0; i < count; ++i)
{
    printf("Extension %zu: %s\n", i, extensions[i]);
}

[重要说明:错误处理留给读者练习]

完成操作后,请记住您free的记忆malloc


为了说明&sdl_extensions您的代码和extensions我的示例之间的区别,请绘制它们并查看它们的区别。

首先sdl_extensions和指针&sdl_extensions

+ ----------------- + + ---------------- + 
| &sdl_extensions | ---> | sdl_extensions | 
+ ----------------- + + ---------------- +

然后extensions从我的示例中(假设count2):

+ ------------ + + --------------- + --------------- + 
| 扩展| ---> | 扩展[0] | 扩展[1] | 
+ ------------ + + --------------- + --------------- +

从这两个图像中,很容易看到一个主要问题:&sdl_extensions指向单个 const char *“元素”,而extensions指向两个元素的数组

因为SDL_Vulkan_GetInstanceExtensions将自变量视为指向包含count指针的数组的第一个元素的指针,所以您的代码将导致SDL_Vulkan_GetInstanceExtensions写出单元素“数组”的边界,从而导致未定义的行为

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将const char *分配给char *

来自分类Dev

将const char数组分配给char数组

来自分类Dev

C:将“ static const char * const”分配给“ static const char *”

来自分类Dev

C:将“ static const char * const”分配给“ static const char *”

来自分类Dev

我们可以将const char *分配给cpp中的字符串吗?

来自分类Dev

如何将内存分配给const char *数组

来自分类Dev

将内存分配给const char ***变量时出现错误“ realloc():下一个大小无效”

来自分类Dev

无法将类型为“ const char *”的值分配给类型为“ char”的实体C OOP

来自分类Dev

在类的const方法中,将char数组分配给T *的C ++方法

来自分类Dev

将const unsigned char *分配给执行就地替换或省略的std :: string

来自分类Dev

将 static_cast<int>(-15) 分配给 static const char 类型变量

来自分类Dev

将字符串作为指针传递时出错,无法将 const char* 分配给 char*

来自分类Dev

类型const char *类型的值不能分配给char *类型的实体吗?

来自分类Dev

从不兼容类型'void(^ __ strong)(int,const char *,int)'分配给'void(*)(int,const char *,int)'

来自分类Dev

(const char *)++或(const char)++?

来自分类Dev

将char指针分配给数组

来自分类Dev

将int值分配给char

来自分类Dev

将Unicode字符分配给char

来自分类Dev

将int值分配给char

来自分类Dev

将内存分配给char **

来自分类Dev

我有一个for循环,将字符分配给char数组,错误:System.IndexOutOfRangeException

来自分类Dev

错误:将'char *'分配给'char [20]'时类型不兼容

来自分类Dev

错误:将'char *'分配给'char [4000]'时类型不兼容

来自分类Dev

如何将一个char中的值分配给一个指针?

来自分类Dev

使用Android NDK在constexpr构造函数(c ++ 17)中分配给const char *失败

来自分类Dev

类型“ const char *”的值不能分配给类型“ LPSTR”的实体

来自分类Dev

将char数组分配给char *

来自分类Dev

如何将char的值分配给char的整数?

来自分类Dev

const char **和char **

Related 相关文章

  1. 1

    将const char *分配给char *

  2. 2

    将const char数组分配给char数组

  3. 3

    C:将“ static const char * const”分配给“ static const char *”

  4. 4

    C:将“ static const char * const”分配给“ static const char *”

  5. 5

    我们可以将const char *分配给cpp中的字符串吗?

  6. 6

    如何将内存分配给const char *数组

  7. 7

    将内存分配给const char ***变量时出现错误“ realloc():下一个大小无效”

  8. 8

    无法将类型为“ const char *”的值分配给类型为“ char”的实体C OOP

  9. 9

    在类的const方法中,将char数组分配给T *的C ++方法

  10. 10

    将const unsigned char *分配给执行就地替换或省略的std :: string

  11. 11

    将 static_cast<int>(-15) 分配给 static const char 类型变量

  12. 12

    将字符串作为指针传递时出错,无法将 const char* 分配给 char*

  13. 13

    类型const char *类型的值不能分配给char *类型的实体吗?

  14. 14

    从不兼容类型'void(^ __ strong)(int,const char *,int)'分配给'void(*)(int,const char *,int)'

  15. 15

    (const char *)++或(const char)++?

  16. 16

    将char指针分配给数组

  17. 17

    将int值分配给char

  18. 18

    将Unicode字符分配给char

  19. 19

    将int值分配给char

  20. 20

    将内存分配给char **

  21. 21

    我有一个for循环,将字符分配给char数组,错误:System.IndexOutOfRangeException

  22. 22

    错误:将'char *'分配给'char [20]'时类型不兼容

  23. 23

    错误:将'char *'分配给'char [4000]'时类型不兼容

  24. 24

    如何将一个char中的值分配给一个指针?

  25. 25

    使用Android NDK在constexpr构造函数(c ++ 17)中分配给const char *失败

  26. 26

    类型“ const char *”的值不能分配给类型“ LPSTR”的实体

  27. 27

    将char数组分配给char *

  28. 28

    如何将char的值分配给char的整数?

  29. 29

    const char **和char **

热门标签

归档