Отправка структуры через сокеты UDP memcopy Переполнение стека

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

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

Вот моя структура:

struct map{
Player Player1;//DECLARE Player SPRITE

vector<Bullet> Bullets;

vector<Enemy*> Enemies;

}Map;
char Buffer[100];

и эта функция, которую я использую, используется после получения структуры:

memcpy(&Map, Buffer, sizeof(Buffer));
MessageBox (NULL, "Memcopied",  "HelloMsg", MB_OK);

Буду очень признателен за любую помощь, спасибо

0

Решение

Похоже Player и / или vector находятся не только в стеке, но и имеют указатели на другое место, например, в кучу, чтобы хранить всю вашу информацию. Таким образом, эти указатели будут болтаться, как только вы распакуете свое сообщение. Вы должны попытаться создать свой собственный формат данных, где вся информация аккуратно размещается в памяти.

2

Другие решения

Старые функции C, такие как memcpy и memset, хороши для структур POD, но они очень опасны для структур / классов, которые содержат такие «сложные» объекты, как контейнеры std. Memcpy копирует объекты просто побайтно. Однако контейнеры std содержат указатели на память в куче, и когда вы копируете их с помощью memcpy, вы получаете два объекта, указывающих на одну и ту же память. Когда один из них уничтожен, другой все еще указывает на удаленную память. Это вызывает аварию. Я думаю, что вам нужно какой-то конкретный тип для передачи данных с сервера на клиент.

0

По вопросам рекламы [email protected]