array index out of bounds
#1

I have a problem in a piece of code, where dont find the soluction:

PHP код:
#define MAX_TASKS         100
enum CTask
{
    
int:iSleep,             
    
int:iRemainingTime,
    
int:iType,             
    
sParam1[256],       
    
sParam2[256],       
    
bool:bActive false,
};
new 
pTasks[MAX_TASKS][CTask];
forward CreateTask(int:Sleepint:Type, const Param1[], const Param2[]);
public 
CreateTask(int:Sleepint:Type, const Param1[], const Param2[])
{
    
//get a first non active pTasks to overwrite
    
new iEmptySlot = -1;
    for (new 
0MAX_TASKSi++)
    {
        if ( 
pTasks[i][bActive] ) continue;
        
iEmptySlot i;
        break;
    }
    
    if ( 
iEmptySlot == -1) return false;
    
    
pTasks[iEmptySlot][iSleep]             = Sleep
    
pTasks[iEmptySlot][iRemainingTime]     = Sleep//LINE 93
    
pTasks[iEmptySlot][iType]           = Type//LINE 94
    
pTasks[iEmptySlot][bActive]         = 1;
    
format(pTasks[iEmptySlot][sParam1], 256"%s"Param1); //LINE 96
    
format(pTasks[iEmptySlot][sParam2], 256"%s"Param2); //LINE 97
    
    
return true;

In the lines marked, give a "array index out of bounds".
Where is the error?

Код:
C:\Program Files\Rockstar Games\samp03csvr_R2-2_win32\gamemodes\rick.pwn(93) : error 032: array index out of bounds (variable "pTasks")
C:\Program Files\Rockstar Games\samp03csvr_R2-2_win32\gamemodes\rick.pwn(94) : error 032: array index out of bounds (variable "pTasks")
C:\Program Files\Rockstar Games\samp03csvr_R2-2_win32\gamemodes\rick.pwn(96) : error 032: array index out of bounds (variable "pTasks")
C:\Program Files\Rockstar Games\samp03csvr_R2-2_win32\gamemodes\rick.pwn(97) : error 032: array index out of bounds (variable "pTasks")

Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


4 Errors.
Reply
#2

The enum variable always saves next unused constant number

Lets start in our enum
pawn Код:
enum CTask //normal mode (+= 1)
{
    int:iSleep, // = 0
    int:iRemainingTime, // = 1
    int:iType, // = 2
    sParam1[256], // = 3 - 258
    sParam2[256], // = 259 - 514
    bool:bActive = false, //normally 515 but we set it to 0 again
}; // => last constant number + 1 step => CTask = 1

new pTasks[MAX_TASKS][CTask];
Now it should be clear why the out of bounds error appeared

Since all variables are by default 0 (false) you dont need to set bActive to false
Reply
#3

Wow.. nice explanation!

Now working..

Thanks.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)