使用malloc时无效从`void *'转换为`char *'?

我遇到了第5行的错误,下面的代码有问题:

错误:无效转换从void*char*

我使用g ++与codeblocks,我试图编译这个文件作为cpp文件。 有关系吗?

 #include <openssl/crypto.h> int main() { char *foo = malloc(1); if (!foo) { printf("malloc()"); exit(1); } OPENSSL_cleanse(foo, 1); printf("cleaned one byte\n"); OPENSSL_cleanse(foo, 0); printf("cleaned zero bytes\n"); } 

在C ++中,您需要将malloc()的返回值

 char *foo = (char*)malloc(1); 

C ++被devise成比C更安全的types,所以你不能(自动) void*转换另一个指针types。 由于你的文件是一个.cpp ,你的编译器需要C ++代码,正如前面提到的那样,由于你将一个char*分配给一个void* ,所以你对malloc的调用将不会被编译。

如果您将文件更改为.c那么它会期望C代码。 在C中,你不需要在void*和另一个指针types之间指定一个转换。 如果您将文件更改为.c ,则会成功编译。

我认为这是malloc的行。 只需要输出结果 – char *foo = (char*)...

那么,你的意图是什么? 你想写一个C程序或C ++程序?

如果你需要一个C程序,那么不要把它编译为C ++,也就是说,不要给你的文件“.cpp”扩展名或者明确地要求编译器把你的文件当作C语言。在C语言中,你不应该把结果的malloc 。 我认为这是你所需要的,因为你把问题标记为[C]。

如果你需要一个使用malloc的C ++程序,那么你别无select,只能显式地将malloc的返回值转换为正确的types。