Здравствуйте. Возникла непонятная проблема. Код довольно громоздок, т.к. проект немаленький. Поэтому попробую описать словами и маленькими вставками псевдокода.
Есть класс десериализатор (CPacket), который при помощи метода FromBinary заполняет из "двоичных" данных на входе (const char* buf, int len) свои собственные поля.
Есть еще один класс  (CNetworkSession), класс создает объект QUdpSocket, и ловит из него датаграммы.
По факту прихода новой датаграммы CNetwork генерирует сигнал (onNewPacket) и передает туда массив char* и его длину int length.
Т.е если псевдокодом описать:
C++ (Qt)
CNetworkSession::CNetworkSession()
{
  this->udpSocket = new QUdpSocket();
  this->udpSocket->bind(...);
  connect(this->udpSocket, SIGNAL(readyRead()), this, SLOT(NewPacketRecv()));
  ...
}
 
void CNetworkSession::NewPacketRecv()
{
  char* buf = (char*)malloc(...);
  int len  = this->UdpSocket->readDatagram(...);
  if (len > 0)
  {
    buf = (char*)realloc(buf, len);
    emit this->onNewPacket(buf, len);
  }
}
Ну и есть, соответственно, третий класс который уже ловит сигнал onNewPacket(...) от CNetworkSession, применяет класс десериализатор CPacket, ну и в общем далее делает что хочет с этими структурированными данными.
примерно таким образом:
C++ (Qt)
void CEndpointClass::SlotOnNewPacket(char* buf, int len)
{
    CPacket packet;
    packet.FromBinary(buf, len);
 
    int someValue = packet.getSomeValue();    // <----- trouble
}
В общем, когда вызывается packet.FromBinary() внутри него все данные десериализуются правильно (трассировка + watch показали).
когда далее в someValue происходит присвоение packet.getSomeValue(), в someValue попадают абсолютно неверные данные.
если идти трассировкой в слоте SlotOnNewPacket и посмотреть в Watch значения объекта packet какбы из слота, то там тоже неверные данные. Причем они такие, как будто в структуре класса произошло некое смещение. 
Если унаследовать CPacket от QObject и добавить к нему макрос Q_OBJECT, при трассировке из слота в объекте поля становятся верными.
но в intSomeValue всё равно попадает какая-то фигня. 
getSomeValue() - это обычный геттер приватного свойства.
Подскажите пожалуйста, что за магия такая 

Самое фиговое, что всё это выполняется в одном трэде и не распараллеливалось (да и не нужно). Я бы понял, если бы что-то подобное творилось между разными тредами.
Прям расстраивает Qt во времена таких диких странностей.