目前在我的游戏服务器上工作。当玩家在尸体对象的矩形上方发送一条消息以使用特定物品时,会发生此异常。该代码在名为“匹配”的对象内进行,该对象具有玩家和尸体的完整列表。一分钟我的对象就可以了,我可以读取其所有变量值,没有垃圾值。突然之间,我无法读取我所在的对象中的任何内存。最终导致访问冲突异常。当播放器发送使用项目消息时,此功能称为:void Player::use_res(){ myMatch->res_corpse_under_player(this);}我给我想要检查的玩家是否将其放在匹配对象中的尸体上。所以现在我们在match对象中。这是此事件发生的三个功能,位于Match.cpp中:bool intersect_inmatch(SFRECTANGLE a, SFRECTANGLE b){ if (a.left < b.right && b.left < a.right && a.top < b.bottom) return b.top < a.bottom; else return false;}//Find the corpse that's undernearth this player//corpse loop exception fix attemptCorpse* Match::find_corpse_under_player(Player* player){ bool intersection = false; SFRECTANGLE prect = player->getPRECT(); std::list<Corpse>::iterator cit; cit = corpses.begin(); while(cit != corpses.end()){ SFRECTANGLE crect; crect.left = cit->x; crect.top = cit->y; crect.right = cit->x + cit->mask.getSize().x; crect.bottom = cit->y + cit->mask.getSize().y; intersection = intersect_inmatch(prect, crect); if(intersection){ return &(*cit); } ++cit; } return NULL;}void Match::res_corpse_under_player(Player* player){ cout << "res corpse match function call" << endl; Corpse* c = find_corpse_under_player(player); if(c != NULL){ cout << "found corpse" << endl; cout << "corpse name: " << c->name << endl; if(c->thisPlayer != NULL){ cout << "this player: " << c->thisPlayer->name << endl; } }}我调试了它,在此行之后,该对象似乎无法访问其自身的任何内存: 相交= intersect_inmatch(prect,crect);此功能是我尝试查看矩形是否重叠的地方。这是调试的图片:http://i.imgur.com/M4yphMO.png我尝试进入intersect_inmatch(...)调用,但由于某种原因,调试器指向此行: crect.bottom = cit-> y + cit-> mask.getSize()。y;然后它再次指向该行: 相交= intersect_inmatch(prect,crect);我尝试再次进入它,但现在它遍及了它。之后,该对象似乎无法读取其任何内存(图片中的步骤3)。我不知道为什么会这样。可能会做什么?我已经工作了6个小时,试图找出原因,但是我找不到原因。异常发生在此行: cout name Server.exe中0x696C40F6(msvcp110.dll)的未处理异常:0xC0000005:访问冲突读取位置0x00000000。编辑:这是我最初在此处创建尸体对象并将其推送到Match对象中的列表的位置://Player.cppPlayer::make_corpse_out_of_this_player(){ Corpse corpse(x, y, this); //this == instance of Player, setting Player* thisPlayer pointer to this in Corpse object. corpse.name = string(name); corpse.mask = mask; myMatchPointer->corpses.push_back(corpse);} (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 原来,当我第一次创建我的Corpse对象并将其推送到列表时,我实际上并没有设置c-> thisPlayer,因此它具有垃圾值。 (adsbygoogle = window.adsbygoogle || []).push({}); 10-06 09:40