«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему `malloc()` вызывает ошибку «Недопустимое преобразование» в C++?

Почему `malloc()` вызывает ошибку «Недопустимое преобразование» в C++?

Опубликовано 8 ноября 2024 г.
Просматривать:453

 Why Does `malloc()` Cause an \

Проблема выделения памяти: понимание ошибки «Недопустимое преобразование»

Приведенный код представляет собой распространенную проблему при попытке выделить память с помощью malloc( ). Ошибка возникает из-за присвоения возвращаемого значения malloc() непосредственно указателю char без надлежащего приведения типов.

Функция malloc() резервирует блок памяти в куче и возвращает общий указатель void. Однако код присваивает этот указатель указателю char без явного преобразования типа. Это несоответствие вызывает ошибку компиляции «недопустимое преобразование из void в char`».

Устранение ошибки преобразования

Чтобы решить эту проблему, вы должен явно привести возвращаемое значение malloc() к желаемому типу. В этом случае вам нужно привести указатель на символ. Правильное объявление должно выглядеть так:

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

Эта операция приведения явно преобразует общий указатель void, возвращаемый функцией malloc(). на указатель на символ.

G Предупреждение

В сообщении об ошибке упоминается использование g с CodeBlocks и возникает вопрос о том, имеет ли значение компиляция файла как файла .cpp. . Ответ: да. Код, скомпилированный с помощью g, по умолчанию соответствует стандарту C, который требует приведения, показанного выше. Это гарантирует, что компилятор строго обрабатывает преобразования типов и предотвращает потенциальные проблемы или неопределенное поведение.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3