我遇到了以下代码的问题,错误在第5行:
错误:从
的转换无效void*
到char*
我正在使用带有代码块的g ++,我尝试将此文件编译为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");
}
答案 0 :(得分:101)
在C ++中,您需要转换malloc()
char *foo = (char*)malloc(1);
答案 1 :(得分:23)
C ++设计为比C更安全,因此您无法(自动)将从 void*
转换为另一种指针类型。由于您的文件是.cpp
,因此您的编译器需要C ++代码,并且如前所述,由于您要将char*
分配给void*
,因此您对malloc的调用将无法编译。
如果您将文件更改为.c
,那么它将需要C代码。在C中,您不需要在void*
和另一个指针类型之间指定强制转换。如果您将文件更改为.c
,它将成功编译。
答案 2 :(得分:7)
我认为这是malloc的一行。然后投射结果 - char *foo = (char*)...
答案 3 :(得分:5)
那么,你的意图是什么?您是否正在尝试编写C程序或C ++程序?
如果你需要一个C程序,那么不要把它编译为C ++,即要么不给你的文件“.cpp”扩展名,要么明确要求编译器将你的文件视为C.在C语言中你不应该施放malloc
的结果。我认为这是您需要的,因为您将问题标记为[C]。
如果您需要使用malloc
的C ++程序,那么您别无选择,只能将malloc
的返回值显式转换为正确的类型。