6

自从我弄乱C代码以来已经有一段时间了。

在 Ubuntu 下使用 gcc 编译 C 代码时出现以下错误。

我用来编译代码的命令是(如果这些错误是由于我使用的编译器造成的,请告诉我如何让它消失):

gcc -o runnable mycode.C 

错误:从 'void*' 到 'char**' 的无效转换</p>

第 39 行是:

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

序列被声明为:

char **sequence;

seqNum 声明为:

int seqNum
4

2 回答 2

7

补充: sgm 在评论中提供了 Arron 实际问题的禁食解决方案。下面的文字都是准确的,希望对您有所帮助,但它是手头问题的二流解决方案。


您的编译器对指针转换非常严格(您使用的是 c++ 编译器吗?),添加了一个显式转换,例如

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

应该使错误消失。或者,您可以通过某种选项来说服编译器对您轻松一点,例如

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

如果这是在您不想破解的某些第三方代码中,这可能会更好。阅读您的编译器文档以找到您想要的选项。由于gcc我手头上的所有 s(版本 4.0 和 4.2)都对该代码感到满意,因此我不适合提供有关开关以关闭此行为的建议。

于 2009-07-26T20:25:55.783 回答
5

您需要将malloc 的结果转换为您想要的类型。

所以:

char **序列;
 ...
 序列 = (char **)malloc(sizeof(char *) * seqNum);

还要记住,如果你要使用序列,你需要像你所做的那样分配一个“char *”列表,但是你没有分配指向的内存,它只分配了空间指针列表本身。

这是一个错误的部分原因是在不同的指针类型之间分配可能会改变所需的对齐方式。Malloc 保证返回一个指向空间的指针,该指针具有适合任何类型的对齐方式。

于 2009-07-26T20:25:54.473 回答