[ROZWIĄZANE] index out of bounds - nagle w...
olek
06.12.2014
witam, od dzisiaj takie errory wyskoczylo (plugin chodził pare dni juz bez edytowania go i bylo wszystko ok)
L 12/06/2014 - 17:47:26: [AMXX] Run time error 4: index out of bounds
L 12/06/2014 - 17:47:26: [AMXX] [0] deve.sma::PlayerPreThink (line 127)
nad plugin init mam:
#define MAXPLAYERS 18new g_PlayerFrames[MAXPLAYERS]
i potem linia 127:
public PlayerPreThink(id)
{
g_PlayerFrames[id]++
}
//edit
moglo to byc spowodowane wejsciem wiekszej ilosci osob niz 18 na serwer .. ? bo przez chwile taka sytuacja miala miejsce, ale nie wiem czy wlasnie od tego momentu te bledy zaczely sie sypac
Edited by olek, 06.12.2014 17:49.
grankee
06.12.2014
moglo to byc spowodowane wejsciem wiekszej ilosci osob niz 18 na serwer .. ? bo przez chwile taka sytuacja miala miejsce, ale nie wiem czy wlasnie od tego momentu te bledy zaczely sie sypac
Dokładnie to więcej niż 17. Ostatnim elementem tablicy o rozmiarze 18 jest element numer 17. Zdefiniowano MAX_PLAYERS jako 18 i takiego rozmiaru tablica została utworzona. Graczy jest więcej więc plugin próbuje odwołać się do nieistniejącego elementu tablicy. Wyjścia są dwa:
#define MAXPLAYERS 18
zamień na
#define MAXPLAYERS 25
gdzie liczba 25 jest odpowiednia dla serwera 24 slotowego, czyli musisz podać tutaj liczbę slotów +1
drugie wyjście to:
#define MAXPLAYERS 18 new g_PlayerFrames[MAXPLAYERS]
zamień na
new g_PlayerFrames[get_maxplayers()+1]
wtedy serwer dostosuje wartość zmiennej do ilości slotów na serwerze.
ogieR8
06.12.2014
#define MAXPLAYERS 18 new g_PlayerFrames[MAXPLAYERS]new g_PlayerFrames[get_maxplayers()+1]wtedy serwer dostosuje wartość zmiennej do ilości slotów na serwerze.
Pytanie mam, pewnie znasz silnik diablo 5.9, standardowy.. jest tam mnóstwo zmiennych + moja edycja.. duża ilość, naprawdę, wszystkie rejestrujemy globalnie z indexem [33] standardowo.. jeśli użyć tego sposobu.. w dużym stopniu odciąży to serwer i nie będzie miało negatywnego wpływu na jego prace / silnika ? Chodzi mi o jakieś skutki uboczne w postaci bugów. Ogólnie zmiana standardowego [33] na konkretną ilość slotów serwera. Nigdy tak szczerze nie robiłem to pytam.
Załóżmy 300 zmiennych z zarejestrowaniem indexów na [33], gdy serwer mój ma o połowe mniej slotów ? Nie wiem czy zmienne w dużym stopniu obciążają serwer..
GwynBleidD
06.12.2014
300 zmiennych zarejestrowanych na rozmiar 19 zamiast 33 to ledwo ok 16kB oszczędności pamięci ram. Sam sobie odpowiedz czy się opłaca.
Poza tym: new g_PlayerFrames[get_maxplayers()+1] nie zadziała rozmiar tablicy musi być stałą.
sebul
06.12.2014
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL