그래서 난 내 응용 프로그램을 디버깅하고이 디버거가 나에게 말한 경우 :매우 이상한 처리되지 않은 예외 오류에 문
if(p_IS_TRUE(playerid,CHECK_INACTIVITY))
으로 정의된다 : 라인에서
을 이 :
//global
#define CHECK_SPAWNKILL (128) // 0000 0000 0000 0000 0000 0000 1000 0000
#define CHECK_INACTIVITY (256) // 0000 0000 0000 0000 0000 0001 0000 0000
#define CHECK_TELEPORT (512) // 0000 0000 0000 0000 0000 0010 0000 0000
#define CHECK_AIRBREAK (1024) // 0000 0000 0000 0000 0000 0100 0000 0000
unsigned long p_CheckForStuff[MAX_PLAYERS];
#define p_IS_TRUE(playerid,check) (p_CheckForStuff[playerid] & check)
list<int> PlayerLoopList;
//When a player connects
PlayerLoopList.push_back(playerid);
p_CheckForStuff[playerid] =-1;//enable all checks
//When a player disconnects
PlayerLoopList.remove(playerid);
//ProcessTick
int playerid = 0;
int ProcessTicksize = 0;
int ProcessTickindex = 0;
for (list <int>::iterator i = PlayerLoopList.begin(); i != PlayerLoopList.end(); ++i)
{
playerid = *i;
int playerstate = GetPlayerState(playerid);
int vid = GetPlayerVehicleID(playerid);
if(g_IS_TRUE(CHECK_INACTIVITY))
{
if(p_IS_TRUE(playerid,CHECK_INACTIVITY))
{
if(p_AcivityInfo[playerid].Reported == false)
{
그것은 다음과 같이 재현 할 수 있습니다 :
1) 서버 2) 출구/쫓아 낼 수 조인? 3) 다시 가입하십시오. 4) 충돌이 발생했습니다.
왜 이런 일이 일어나는 지 알고 계십니까? 코드는 나에게 완벽 해 보입니다.
디버그 빌드를 시도하고 변수 값을 확인해야합니다. 특히'playerid'는'p_CheckForStuff'에 유효한 인덱스입니까? –
왜'PlayerLoopList'에 대한 벡터가 있지만'p_checkForStuff'에 대한 벡터가 없습니까? 'playerid'가 항상 'MAX_PLAYERS'보다 작습니까? – RedX
반복마다이 문제가 발생합니까? p_IS_TRUE에서 playerid의 int 값을 수동으로 지정하려고 시도 했습니까? – madu