Возникла потребность добавить в си код с++ код, решил перекомпилировать си код с++ компиляором, но malloc выдает ошибку

Возникла потребность добавить в си код с++ код, решил перекомпилировать си код с++ компиляором, но malloc выдает ошибку: /home/anton/Programming/test1111/main.cpp:6: ошибка: cannot initialize a variable of type 'char *' with an rvalue of type 'void *'. Использую qt + gcc. Как это исправить ?


Ответы (1 шт):

Автор решения: Croessmah

Данная ошибка возникает из-за различий правил преобразования указателей void * в указатели других типов. В языке C неявное преобразование указателей void * в указатели на другие объектные типы разрешено, тогда как в C++ такое преобразование не предусмотрено. Однако в обоих языках такое преобразование разрешается произвести явно:

void * p1 = 0;
char * p2 = p1;       //C - ok, C++ - ошибка
char * p3 = (char*)p1;//C - ok, C++ - ok

Функция malloc как раз возвращает указатель типа void *, и в вашем коде результат функции присваивается указателю типа char *, что и приводит к ошибке, если нет явного преобразования типа:

char * p1 = malloc(size);        //C - ok, C++ - ошибка
char * p2 = (char *)malloc(size);//C - ok, C++ - ok

Способ с явным преобразованием является совместимым как с C, так и с C++, но это не значит, что это единственная проблема с которой вы можете столкнуться, если будете компилировать C-код компилятором C++.

→ Ссылка