提问者:小点点

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


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

共3个答案

匿名用户

在C++中,您需要强制转换malloc()的返回值

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

匿名用户

C++被设计成比C更安全的类型,因此您不能(自动)从void*转换为另一种指针类型。 由于您的文件是.cpp,因此编译器需要C++代码,并且正如前面提到的,您对malloc的调用将不会编译,因为您正在将char*分配给void*

如果您将文件更改为.C,那么它将需要C代码。 在C语言中,不需要在void*和另一个指针类型之间指定强制转换。 如果您将文件更改为.c,它将成功编译。

匿名用户

我猜这是马洛克的台词。 只需强制转换结果,然后-char*foo=(char*)...