使用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。