从void *的无效converstion为char **(Invalid converstion

2019-09-20 23:44发布

因为我与C语言代码搞砸它已经有一段时间。

使用gcc在Ubuntu下编译C代码时,我收到以下错误。

我使用的编译代码的命令(如果这些错误是因为编译器的我使用的,请让我知道如何使走开):

gcc -o runnable mycode.C 

错误:从无效转换“无效*”到“字符**”

第39行是:

sequence=malloc(sizeof(char *)*seqNum);

序列被声明为:

char **sequence;

SEQNUM声明为:

int seqNum

Answer 1:

补充:禁食解决阿龙的实际问题是由上海通用汽车在注释中。 下面的文字都是准确的,希望有所帮助,但手头第二速度解决问题。


你的编译器正在非常硬着颈项转换指针类型(是否使用C ++编译器?),将有明确的转换像

sequence=(char**)malloc(sizeof(char *)*seqNum);

应使错误消失。 或者你也许可以说服编译器去容易对你有某种选项的像

$(CC) --lighten-up-baby code.c

如果这是在一些第三方的代码,你并不真的想破解这可能是可取的。 阅读你的编译器文档,找到您想要的选项。 由于所有gcc的I手头上(版本4.0和4.2),很高兴与该代码,我不是一个好地方,提供交换机上建议关闭该行为。



Answer 2:

你需要投malloc的结果是你想要的类型。

所以:

 char **sequence;
 ...
 sequence = (char **)malloc(sizeof(char *) * seqNum);

还要记住,如果你要使用序列,你需要分配的“字符*”个列表,你这样做,但是,你没有指向的分配的内存,它的唯一分配的空间为指针本身的列表。

用于此作为一个错误的部分原因是,不同的指针类型之间分配可以改变所需的对准。 malloc的是保证返回一个指向空间具有适合于任何类型的对准。



文章来源: Invalid converstion from void* to char**