0

我正在编写一个混合程序,当发生更改(添加新子弹、添加新敌人、删除敌人或子弹)时,它会从服务器向客户端发送一个包含精灵向量的结构。该程序经常在结构中的向量中添加几个敌人。

结构的发送和接收似乎工作正常,但是当我尝试将结构复制到客户端程序上的敲击中时,程序崩溃了。我不确定是否必须重新调整结构的大小或如何执行此操作,或者是否有其他解决方案。

这是我的结构:

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);

我将非常感谢任何帮助,谢谢

4

2 回答 2

2

看起来Player和/或vector不仅在堆栈上,而且还有指向其他地方的指针,比如堆上来存储你的所有信息。因此,一旦您打开消息,这些指针就会悬空。您应该尝试设计自己的数据格式,其中所有信息都整齐地放置在内存中。

于 2013-01-03T20:37:06.170 回答
0

像 memcpy 和 memset 这样的旧 C 函数对 POD 结构很有用,但对于包含诸如 std 容器这样的“复杂”对象的结构/类来说,它们是非常危险的。Memcpy 只是逐字节复制对象。但是,std 容器在堆中包含指向内存的指针,当您使用 memcpy 复制它们时,您会得到两个指向同一内存的对象。当其中一个被销毁时,另一个仍然指向已删除的内存。它会导致崩溃。我认为您需要某种特定类型才能将数据从服务器传递到客户端。

于 2013-01-03T22:50:43.027 回答