После этого вопроса я решил сериализовать некоторые данные, которые мне нужно отправить через соединение TCP / IP.
Данные довольно просты:
typedef struct whiteboard {
int palladium, platine, zirconium, erbium, astate, californium;
} sharedData;
И моя функция сериализации довольно проста:
void serializeWhiteboard (sharedData* message, char** packet) {
int* r = (int*) packet;
*r = (int)VALUE_FROM_ENUM; // just some enum to get the type of message sent
r++;
char* q = (char*) r;
*q = '/'; q++; // delimitors for parsing
*q = '/'; q++; // the message on the other end
int* p = (int*) q;
*p = message->palladium; p++;
*p = message->platine; p++;
*p = message->zirconium; p++;
*p = message->erbium; p++;
*p = message->astate; p++;
*p = message->californium; p++;
return;
}
В моей вызывающей программе у меня есть следующий код:
int main() {
sharedData data = {0};
// define the data values ...
char* dest = malloc(sizeof(int) + 2*sizeof(char) + 6*sizeof(int));
serialiseWhiteboard(&data, &dest);
// And here, the first two fields of 'data' have changed
// as if by magic, since I do not touch the fields in
// serializeWhiteboard() .
return 0;
}
Я не могу на всю жизнь понять, почемупервые два поля данных изменились бы, когда я просто прочитал значения из этого.И все же с некоторыми значениями печати я смог отследить его до последней строки в serializeWhiteboard()
, непосредственно перед return;
, что не имеет никакого смысла.С данными все в порядке, пока не позвонили return
.
Кто-нибудь сталкивался с такой проблемой раньше?