Невозможно проверить, что это правильно, если вы не показываете, на что указывает указатель.
Но, учитывая, что вы пытаетесь увеличить указатель на sizeof(unsigned int)
, было бы разумно, если бы *buffer
указываетк элементу массива unsigned int
, и вы пытаетесь увеличить указатель на следующего брата.
Правильный способ сделать это:
auto ptr = static_cast<unsigned*>(*buffer);
*buffer = ptr + 1;
С другой стороны, если, если указывает на необработанное хранилище, такое как std::byte
, правильный путь:
auto ptr = static_cast<std::byte*>(*buffer);
*buffer = ptr + sizeof payload;
Вместо использования void**
, я рекомендую следующее:
template <class T>
std::byte* pack(std::byte* buffer, T payload) {
static_assert(std::is_trivially_copyable_v<T>);
std::memcpy(buffer, std::addressof(payload), sizeof payload);
return buffer + sizeof payload;
}