invalid conversion from `void*' to `char*' when using malloc?

C++G++Malloc

C++ Problem Overview


I'm having trouble with the code below with the error on line 5:

> error: invalid conversion from void* to char*

I'm using g++ with codeblocks and I tried to compile this file as a cpp file. Does it matter?

#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++ Solutions


Solution 1 - C++

In C++, you need to cast the return of malloc()

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

Solution 2 - C++

C++ is designed to be more type safe than C, therefore you cannot (automatically) convert from void* to another pointer type. Since your file is a .cpp, your compiler is expecting C++ code and, as previously mentioned, your call to malloc will not compile since your are assigning a char* to a void*.

If you change your file to a .c then it will expect C code. In C, you do not need to specify a cast between void* and another pointer type. If you change your file to a .c it will compile successfully.

Solution 3 - C++

I assume this is the line with malloc. Just cast the result then - char *foo = (char*)...

Solution 4 - C++

So, what was your intent? Are you trying to write a C program or C++ program?

If you need a C program, then don't compile it as C++, i.e. either don't give your file ".cpp" extension or explicitly ask the compiler to treat your file as C. In C language you should not cast the result of malloc. I assume that this is what you need since you tagged your question as [C].

If you need a C++ program that uses malloc, then you have no choice but to explicitly cast the return value of malloc to the proper type.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionpandoragamiView Question on Stackoverflow
Solution 1 - C++karlphillipView Answer on Stackoverflow
Solution 2 - C++MarlonView Answer on Stackoverflow
Solution 3 - C++viraptorView Answer on Stackoverflow
Solution 4 - C++AnTView Answer on Stackoverflow