Подозрительное преобразование указателя в указатель (область слишком мала)

0

Я получаю это предупреждение за свою логику -

Логика:

uint8_t     *m_data;

uint32_t* datap = (uint32_t*)m_data;

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

Info 826: Suspicious pointer-to-pointer conversion (area too small)

Так как требуется, чтобы придать значение при назначении.. И я не чувствую, что что-то не так в данной строке кода. Как я могу подавить это предупреждение или удалить его из сборки

  • 0
    Что ты на самом деле пытаешься сделать? Если m_data указывает на то, что имеет только 8- m_data пространство, почему вы хотите указать на него, как если бы оно было 32-битным?
Теги:
lint

1 ответ

2

Это не правильный выбор, вы пытаетесь интерпретировать указатель на байт как указатель на 4 байта и приводить к неожиданным результатам. Если uint32_t имеет разные требования к выравниванию, чем uint8_t, вы можете получить другое значение указателя, а также то, на что оно указывает. Если вы хотите преобразовать значение, просто выполните:

uint32_t datap;
datap = static_cast<uint32_t>(*m_data);
  • 0
    @perreal только для указания datap не является указателем.
  • 0
    но что если размер указателя равен 8 байтам? та же проблема до сих пор.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню