C++ C++;-从';void*';至';uint8**';

C++ C++;-从';void*';至';uint8**';,c++,C++,我有一个初学者的问题,我没有找到任何正确的方法。 在标题中,我有: static uint8_t **data = NULL; 在我的功能中,我想: data = av_mallocz (sizeof (uint8_t*) *planes); 但错误来了: 从“void*”到“uint8\u t**”的转换无效 av_mallocz函数来自ffmpeg:返回av_mallocz(nmemb*size) 有人有主意吗?试试这个: data = (uint8_t**)av_mal

我有一个初学者的问题,我没有找到任何正确的方法。 在标题中,我有:

    static uint8_t **data = NULL;
在我的功能中,我想:

    data = av_mallocz (sizeof (uint8_t*) *planes);
但错误来了:

从“void*”到“uint8\u t**”的转换无效

av_mallocz
函数来自ffmpeg:
返回av_mallocz(nmemb*size)

有人有主意吗?

试试这个:

data = (uint8_t**)av_mallocz (sizeof (uint8_t*) *planes);
请记住,
sizeof(uint8\u t*)
不会告诉您的代码数据将是什么类型,它只是帮助计算malloc需要多少空间。malloc返回泛型空间,这就是is使用void*的原因。您仍然需要将该void*转换为您想要的类型。 哦,既然这是C++,你可能想考虑<代码> STATICE-CAST(…)>代码>,只是要更好。< /P> < P>试试这个:

data = (uint8_t**)av_mallocz (sizeof (uint8_t*) *planes);
请记住,
sizeof(uint8\u t*)
不会告诉您的代码数据将是什么类型,它只是帮助计算malloc需要多少空间。malloc返回泛型空间,这就是is使用void*的原因。您仍然需要将该void*转换为您想要的类型。
哦,既然这是C++,你可能想考虑<代码> STATICEJASE(…)>代码>,只是要更好一些。

在<代码> C <代码>中,可以从 Vult*/Cux>隐式地转换成任何其他指针类型。在
C++
中,您不能。您必须显式强制转换。@BoBTFish-在C中,存在从
void*
到任何其他指针类型的隐式转换。转换是您在源代码中编写的命令编译器进行转换的内容,也就是说,它是一种显式转换。在
C
中,您可以从
void*
隐式转换为任何其他指针类型。在
C++
中,您不能。您必须显式强制转换。@BoBTFish-在C中,存在从
void*
到任何其他指针类型的隐式转换。强制转换是您在源代码中编写的命令编译器进行转换的东西,也就是说,它是显式转换。我忘记了第一个uint8\t之后的第二个指针,谢谢它现在起作用了。几分钟后我接受你的回答。@user2492388好主意。右边有一个链接“权威C++指南和列表”。令人惊讶的是,有多少人想从YouTube视频中学习C++。我忘记了第一个UTI8T后的第二个指针,谢谢。几分钟后我接受你的回答。@user2492388好主意。右边有一个链接“权威C++指南和列表”。令人惊讶的是有多少人想从YouTube视频中学习C++。