Помогите с логами
#1

Что это?


PHP код:
[18:49:09] [debugRun time error 4"Array index out of bounds"
[18:49:09] [debug]  Accessing element at index 65535 past array upper bound 499
[18:49:09] [debugAMX backtrace:
[
18:49:09] [debug#0 001d4124 in ?? (65535) from new.amx
[18:49:09] [debug#1 000147e0 in public OnPlayerDeath (13, 65535, 255) from new.amx
[18:49:10] [debugRun time error 4"Array index out of bounds"
[18:49:10] [debug]  Accessing element at index 65535 past array upper bound 499
[18:49:10] [debugAMX backtrace:
[
18:49:10] [debug#0 001d4124 in ?? (65535) from new.amx
[18:49:10] [debug#1 000147e0 in public OnPlayerDeath (9, 65535, 255) from new.amx
[18:49:14] [debugRun time error 4"Array index out of bounds"
[18:49:14] [debug]  Accessing element at index 65535 past array upper bound 499
[18:49:14] [debugAMX backtrace:
[
18:49:14] [debug#0 001d4124 in ?? (65535) from new.amx
[18:49:14] [debug#1 000147e0 in public OnPlayerDeath (13, 65535, 255) from new.amx
[18:49:28] [debugRun time error 4"Array index out of bounds"
[18:49:28] [debug]  Accessing element at negative index -1
[18:49:28] [debugAMX backtrace:
[
18:49:28] [debug#0 001148bc in ?? (7) from new.amx
[18:49:28] [debug#1 000ab744 in public OnPlayerClickTextDraw (7, 65535) from new.amx
[18:49:36] [debugRun time error 4"Array index out of bounds"
[18:49:36] [debug]  Accessing element at negative index -1
[18:49:36] [debugAMX backtrace:
[
18:49:36] [debug#0 001148bc in ?? (7) from new.amx
[18:49:36] [debug#1 000ab744 in public OnPlayerClickTextDraw (7, 65535) from new.amx 
Reply
#2

В массиве 499 ячеек, у тебя в коде запрашиваются 65535
Reply
#3

как исправить, что нужно смотреть?
Reply
#4

Условия сделать на INVALID_PLAYER_ID и INVALID_TEXT_DRAW
Reply
#5

пример условия которое будет выдавать данные ошибки скинь
Reply
#6

Quote:
Originally Posted by nikita86826
Посмотреть сообщение
пример условия которое будет выдавать данные ошибки скинь
Имеется ввиду, что надо учитывать все возможные значения, в т.ч. INVALID_PLAYER_ID. Например, мы знаем, что в killerid приходит ид убийцы, но вы забыли, что игрок может умереть и сам. В таком случае в killerid попадет значение 65535 (INVALID_PLAYER_ID), в неправильном коде это спровоцирует выход за пределы массива.

Неправильно:
PHP код:
public OnPlayerDeath(playeridkilleridreason)
{
    
SendClientMessage(playerid, -1"Wasted");
    
kills[killerid] ++;

Правильно:
PHP код:
public OnPlayerDeath(playeridkilleridreason)
{
    
SendClientMessage(playerid, -1"Wasted");
    if(
killerid != INVALID_PLAYER_ID)
    {
        
kills[killerid] ++;
    }

Reply
#7

Quote:
Originally Posted by stabker
Посмотреть сообщение
Имеется ввиду, что надо учитывать все возможные значения, в т.ч. INVALID_PLAYER_ID. Например, мы знаем, что в killerid приходит ид убийцы, но вы забыли, что игрок может умереть и сам. В таком случае в killerid попадет значение 65535 (INVALID_PLAYER_ID), в неправильном коде это спровоцирует выход за пределы массива.

Неправильно:
PHP код:
public OnPlayerDeath(playeridkilleridreason)
{
    
SendClientMessage(playerid, -1"Wasted");
    
kills[killerid] ++;

Правильно:
PHP код:
public OnPlayerDeath(playeridkilleridreason)
{
    
SendClientMessage(playerid, -1"Wasted");
    if(
killerid != INVALID_PLAYER_ID)
    {
        
kills[killerid] ++;
    }

Неправильно:
PHP код:
public OnPlayerDeath(playeridkilleridreason)
{
    
SendClientMessage(playerid, -1"Wasted");
    
kills[killerid] ++;

Неправильно:
PHP код:
public OnPlayerDeath(playeridkilleridreason)
{
    
SendClientMessage(playerid, -1"Wasted");
    if(
killerid != INVALID_PLAYER_ID)
    {
        
kills[killerid] ++;
    }

Правильно:
PHP код:
public OnPlayerDeath(playeridkilleridreason)
{
    if(
killerid != INVALID_PLAYER_ID)
    {
        if(!
IsPlayerConnected(killerid) || killerid == playerid) return 0;
        
kills[killerid] ++;
    }
    
SendClientMessage(playerid, -1"Wasted");
    
death[playerid]++;
    return 
1;

Reply
#8

Quote:
Originally Posted by White_116
Посмотреть сообщение
Неправильно:
PHP код:
public OnPlayerDeath(playeridkilleridreason)
{
    
SendClientMessage(playerid, -1"Wasted");
    
kills[killerid] ++;

Неправильно:
PHP код:
public OnPlayerDeath(playeridkilleridreason)
{
    
SendClientMessage(playerid, -1"Wasted");
    if(
killerid != INVALID_PLAYER_ID)
    {
        
kills[killerid] ++;
    }

Правильно:
PHP код:
public OnPlayerDeath(playeridkilleridreason)
{
    if(
killerid != INVALID_PLAYER_ID)
    {
        if(!
IsPlayerConnected(killerid) || killerid == playerid) return 0;
        
kills[killerid] ++;
    }
    
SendClientMessage(playerid, -1"Wasted");
    
death[playerid]++;
    return 
1;

Да, я просто объяснил в общих чертах. Остальное и так очевидно.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)