gpt4 book ai didi

c++ - 列表中指针的问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:15:40 24 4
gpt4 key购买 nike

出于某种原因,当我尝试读取 std::list(playerlist)中指向对象(GamePlayer)的指针的属性时>) 它起初有效,但是当我稍后尝试在另一个函数中访问它时,我得到了一堆随机数而不是我客户端套接字的数字。那是一口,对不起。我希望有人可以阐明这种情况。我将包含有缺陷代码的简化版本。

class GameRoom  {

list<GamePlayer*> playerlist;
locigPort( LogicObj );
}


bool GameRoom::logicPort( LogicObj logit ) { // This is room[1]

list<GamePlayer*>::iterator it;

for (it = playerlist.begin(); it != playerlist.end(); it++){

cout << "socket numbers " << (*it)->socketno << endl;
/* (*it)->socketno gives me a bunch of random numbers,
not the socket numbers I was looking for! */
}

return true;

}

bool RoomDB::addPlayer( GamePlayer *playerpoint ) {

roomlist[1].playerlist.push_back( playerpoint );
// This adds the player object to the Gameroom object

cout << "player point " << playerpoint->socketno << " roomno: " << roomno;
// This shows everything should be ok so far

return true;
}

最佳答案

最可能的解释是您正在调用 addPlayer当你调用 logicPort 时,指针变得无效.一种可能是您调用 addPlayer带有堆栈上对象的地址,当堆栈展开时该对象消失。

编辑 问题就在这里:

bool PlayerDB::addPlayer( int sid, GamePlayer tempplayer ) {
...
roomman.addPlayer( &tempplayer, tempplayer.roomno );
}

PlayerDB::addPlayer按值获取第二个参数。这意味着它获得了一个在方法的生命周期内存在的拷贝。然后将指针指向该拷贝,并将其添加到列表中。一次PlayerDB::addPlayer返回,指针失效。

如果没有看到更多代码,很难提出好的修复建议。一种可能性是制作 PlayerDB::addPlayer将指针作为它的第二个参数,并确保您不会在调用链的上一级重复同样的错误

更好的可能性是转 playerlist进入list<GamePlayer> : 从您的代码来看,列表似乎不需要包含指针。这将大大简化事情。

关于c++ - 列表中指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7803572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com