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

时间:2011-02-24 02:20:21

标签: c++ g++ malloc

我遇到了以下代码的问题,错误在第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");
}

4 个答案:

答案 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的返回值显式转换为正确的类型。