Подтвердить что ты не робот

Неверное преобразование из `void * 'в` char *' при использовании 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");
}
4b9b3361

Ответ 1

В С++ вам нужно отдать результат malloc()

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

Ответ 2

С++ предназначен для более безопасного типа, чем C, поэтому вы не можете (автоматически) конвертировать из void* в другой тип указателя. Поскольку ваш файл является .cpp, ваш компилятор ожидает кода на С++, и, как упоминалось ранее, ваш вызов в malloc не будет компилироваться, поскольку вы назначаете char* в void*.

Если вы измените файл на .c, тогда он будет ожидать код C. В C вам не нужно указывать листинг между void* и другим типом указателя. Если вы измените файл на .c, он скомпилируется успешно.

Ответ 3

Я предполагаю, что это линия с malloc. Просто произведите результат, затем - char *foo = (char*)...

Ответ 4

Итак, каковы были ваши намерения? Вы пытаетесь написать программу на C или программу на С++?

Если вам нужна программа на C, тогда не компилируйте ее как С++, то есть либо не предоставляйте расширение файла .cpp, либо явно просите компилятор обрабатывать ваш файл как C. На языке C вы не должны введите результат malloc. Я предполагаю, что это то, что вам нужно, так как вы отметили свой вопрос как [C].

Если вам нужна программа на С++, которая использует malloc, тогда у вас нет выбора, кроме как явно передать возвращаемое значение malloc в соответствующий тип.