Run time error array index out of bounds[+rep] -
Matical - 05.01.2016
Hello, I have tried to debug all these backtraces down to the cause lines and have had no luck, maybe some of you guys might have a anwser. Thank you
[03:01:12] [debug] Run time error 4: "Array index out of bounds"
[03:01:12] [debug] Accessing element at index 10 past array upper bound 9
[03:01:12] [debug] AMX backtrace:
[03:01:12] [debug] #0 00061e24 in FormatHouseWeapons (house=1, string[]=@0x05e85840 "") at C:\Users\Nick\Desktop\Ingenious!\gamemodes\test2.p wn:7070
[03:01:12] [debug] #1 000620d0 in UpdateHouseInfo (houseid=1) at C:\Users\Nick\Desktop\Ingenious!\gamemodes\test2.p wn:7089
[03:01:12] [debug] #2 000cf45c in public GlobalSaving () at C:\Users\Nick\Desktop\Ingenious!\gamemodes\test2.p wn:15460
Код:
stock FormatHouseWeapons(house, string[])
{
new wstr[256];
new tmp[64];
for(new a = 1; a < MAX_HOUSE_WEAPONS; a++)
{
new w = HouseInfo[house][hWeapon][a];
new am = HouseInfo[house][hAmmo][a];
if(a == 1)
{
format(tmp,sizeof(tmp),"%d=%d",w,am);
}
else
{
format(tmp,sizeof(tmp),"|%d=%d",w,am);
}
strins(wstr,tmp,strlen(wstr));
}
return format(string, 256, "%s", wstr);
}
Код:
stock UpdateHouseInfo(houseid)
{
new weapons[256];
FormatHouseWeapons(houseid, weapons);
format(query, sizeof(query), "UPDATE `houses` SET `owner` = '%s', `owned` = %d, `locked` = %d, `price`= %d, `levelbuy`= %d, `rentprice` = %d, `rentable` = %d, `interior` = %d, `world` = %d, `cash` = %d, `furnitures` = %d WHERE `id` = %d",
HouseInfo[houseid][hOwner],
HouseInfo[houseid][hOwned],
HouseInfo[houseid][hLocked],
HouseInfo[houseid][hPrice],
HouseInfo[houseid][hLevelbuy],
HouseInfo[houseid][hRentprice],
HouseInfo[houseid][hRentable],
HouseInfo[houseid][hInterior],
HouseInfo[houseid][hWorld],
HouseInfo[houseid][hCash],
HouseInfo[houseid][hFurnitures],
HouseInfo[houseid][hID]);
mysql_function_query(dbHandle, query, false, "", "");
format(query, sizeof(query), "UPDATE `houses` SET `checkx` = %f, `checky` = %f, `checkz` = %f, `weapons` = '%s', `radio` = %d WHERE `id` = %d",
HouseInfo[houseid][hCheckPosX],
HouseInfo[houseid][hCheckPosY],
HouseInfo[houseid][hCheckPosZ],
weapons,
HouseInfo[houseid][hRadio],
HouseInfo[houseid][hID]);
mysql_function_query(dbHandle, query, false, "", "");
return 1;
}
\
Код:
public GlobalSaving()
{
//-------------------------------------------------
foreach(Player, i)
{
SavePlayerStats(i);
}
//-------------------------------------------------
for(new i = 0; i < MAX_PARK_METERS; i++)
{
if(ParkMeters[i][parkOn])
{
SaveParkMeter(i);
}
}
//-------------------------------------------------
for(new i = 0; i < MAX_VEHICLES; i++)
{
if(VehicleInfo[i][carOwned] == 1)
{
SaveVehicle(i);
}
}
//-------------------------------------------------
for(new i = 1; i < MAX_HOUSES; i++)
{
if(HouseInfo[i][hHouseOn] == 1 && HouseInfo[i][hOwned] == 1)
{
UpdateHouseInfo(i);
}
}
//-------------------------------------------------
for(new i = 0; i < MAX_BIZ; i++)
{
if(BizInfo[i][bizOn] == 1)
{
UpdateBizInfo(i);
}
}
//-------------------------------------------------
for(new i = 0; i < MAX_FACTIONS; i++)
{
if(Factions[i][fON] == 1)
{
SaveFaction(i);
}
}
//-------------------------------------------------
SavePlants();
return 1;
}
Re: Run time error array index out of bounds[+rep] -
justinnater - 05.01.2016
I dont believe this will do any harm whatsoever.
This happens when you try to allocate data in a array from a variable bigger than the array is limited to.
Example:
#define MAX_SOMETHING 5
new test[5];
Not correct:
Код:
for(new h=0; h<=MAX_SOMETHING; h++)
{
test[h]=1;
}
Correct:
Код:
for(new h=0; h<MAX_SOMETHING; h++)
{
test[h]=1;
}
Re: Run time error array index out of bounds[+rep] -
justinnater - 05.01.2016
After reviewing your code I'd like to point this out:
Код:
new weapons[256];
FormatHouseWeapons(houseid, weapons);
What are you trying to do here?
I believe you need to change
Код:
stock FormatHouseWeapons(house, string[])
to:
Код:
stock FormatHouseWeapons(house)
Add:
new string[256]; under the stock. (Choose a approperiate array size, I dont know how far your loop will go so I'll stick here with 256)
Change:
Код:
FormatHouseWeapons(houseid, weapons);
to:
Код:
FormatHouseWeapons(houseid);
Re: Run time error array index out of bounds[+rep] -
Matical - 05.01.2016
Well with FormatHouseWeapons i had string[] because at the bottom im formating the string (256) to %s like so
return format(string, 256, "%s", wstr);
my new wstr is my wstring
which are defined here,
new wstring1[56], gunname1[32];
GetWeaponName(PlayerInfo[id][pPerm1],gunname1,sizeof(gunname1));
if(PlayerInfo[id][pPerm1] == 0) { wstring1 = "None"; }
else if(PlayerInfo[id][pPerm1] > 0) { wstring1 = gunname1; }
else { wstring1 = "None"; }
new wstring2[56], gunname2[32];
GetWeaponName(PlayerInfo[id][pPerm2],gunname2,sizeof(gunname2));
if(PlayerInfo[id][pPerm2] == 0) { wstring2 = "None"; }
else if(PlayerInfo[id][pPerm2] > 0) { wstring2 = gunname2; }
else { wstring2 = "None"; }
new wstring3[56], gunname3[32];
GetWeaponName(PlayerInfo[id][pMeleeWep],gunname3,sizeof(gunname3));
if(PlayerInfo[id][pMeleeWep] == 0) { wstring3 = "None"; }
else if(PlayerInfo[id][pMeleeWep] > 0) { wstring3 = gunname3; }
else { wstring3 = "None"; }
Re: Run time error array index out of bounds[+rep] -
justinnater - 05.01.2016
Just do as I told you to and tell me if it worked or not.
Re: Run time error array index out of bounds[+rep] -
Jefff - 05.01.2016
Show define MAX_HOUSE_WEAPONS and HouseInfo enum
pawn Код:
stock FormatHouseWeapons(house, string[], s_size = sizeof(string))
{
string[0] = EOS;
for(new a = 1; a < MAX_HOUSE_WEAPONS; a++)
format(string, s_size, "%s%d=%d|", string, HouseInfo[house][hWeapon][a],HouseInfo[house][hAmmo][a]);
if(string[0])
string[strlen(string) - 1] = EOS;
}
Re: Run time error array index out of bounds[+rep] -
Matical - 05.01.2016
No it didnt work, its outputed the same errors, just different lines, the backtrace calls whenever a player leaves the server.
Код:
#define MAX_HOUSE_WEAPONS 21 // Needs to be plus 1
Код:
enum HOUSE_INFO
{
hID,
Text3D:hLabel,
hCheckPoint,
Float:hEntranceX,
Float:hEntranceY,
Float:hEntranceZ,
Float:hExitX,
Float:hExitY,
Float:hExitZ,
hInfo[128],
hOwner[MAX_PLAYER_NAME],
hOwned,
hLocked,
hPrice,
hLevelbuy,
hRentprice,
hRentable,
hInterior,
hWorld,
hCash,
hFurnitures,
hWeapon[10],
hAmmo[10],
hHouseOn,
Float:hCheckPosX,
Float:hCheckPosY,
Float:hCheckPosZ,
hRadio,
hRadioOn,
hRadioURL[256]
};
new HouseInfo[MAX_HOUSES][HOUSE_INFO];
[15:50:38] [debug] Run time error 4: "Array index out of bounds"
[15:50:38] [debug] Accessing element at index 10 past array upper bound 9
[15:50:38] [debug] AMX backtrace:
[15:50:38] [debug] #0 00062014 in FormatHouseWeapons (house=1) at C:\Users\Nick\Desktop\Ingenious!\gamemodes\test2.p wn:7087
Код:
stock FormatHouseWeapons(house)
{
new string[256];
new wstr[256];
new tmp[64];
for(new a=1; a<MAX_HOUSE_WEAPONS; a++)
{
new w = HouseInfo[house][hWeapon][a]; > Error line 7087
new am = HouseInfo[house][hAmmo][a];
if(a == 1)
{
format(tmp,sizeof(tmp),"%d=%d",w,am);
}
else
{
format(tmp,sizeof(tmp),"|%d=%d",w,am);
}
strins(wstr,tmp,strlen(wstr));
}
return format(string, 256, "%s", wstr);
}
[15:50:38] [debug] #1 000622b4 in UpdateHouseInfo (houseid=1) at C:\Users\Nick\Desktop\Ingenious!\gamemodes\test2.p wn:7106
Код:
stock UpdateHouseInfo(houseid)
{
new weapons[256];
FormatHouseWeapons(houseid);
format(query, sizeof(query), "UPDATE `houses` SET `owner` = '%s', `owned` = %d, `locked` = %d, `price`= %d, `levelbuy`= %d, `rentprice` = %d, `rentable` = %d, `interior` = %d, `world` = %d, `cash` = %d, `furnitures` = %d WHERE `id` = %d", > Error Line 7106
HouseInfo[houseid][hOwner],
HouseInfo[houseid][hOwned],
HouseInfo[houseid][hLocked],
HouseInfo[houseid][hPrice],
HouseInfo[houseid][hLevelbuy],
HouseInfo[houseid][hRentprice],
HouseInfo[houseid][hRentable],
HouseInfo[houseid][hInterior],
HouseInfo[houseid][hWorld],
HouseInfo[houseid][hCash],
HouseInfo[houseid][hFurnitures],
HouseInfo[houseid][hID]);
mysql_function_query(dbHandle, query, false, "", "");
format(query, sizeof(query), "UPDATE `houses` SET `checkx` = %f, `checky` = %f, `checkz` = %f, `weapons` = '%s', `radio` = %d WHERE `id` = %d",
HouseInfo[houseid][hCheckPosX],
HouseInfo[houseid][hCheckPosY],
HouseInfo[houseid][hCheckPosZ],
weapons,
HouseInfo[houseid][hRadio],
HouseInfo[houseid][hID]);
mysql_function_query(dbHandle, query, false, "", "");
return 1;
}
[15:50:38] [debug] #2 000de510 in public GlobalSaving () at C:\Users\Nick\Desktop\Ingenious!\gamemodes\test2.p wn:15863
Код:
public GlobalSaving()
{
//-------------------------------------------------
foreach(Player, i)
{
SavePlayerStats(i);
}
//-------------------------------------------------
for(new i = 0; i < MAX_PARK_METERS; i++)
{
if(ParkMeters[i][parkOn])
{
SaveParkMeter(i);
}
}
//-------------------------------------------------
for(new i = 0; i < MAX_VEHICLES; i++)
{
if(VehicleInfo[i][carOwned] == 1)
{
SaveVehicle(i);
}
}
//-------------------------------------------------
for(new i = 1; i < MAX_HOUSES; i++)
{
if(HouseInfo[i][hHouseOn] == 1 && HouseInfo[i][hOwned] == 1)
{
UpdateHouseInfo(i); > Error Line 15863
}
}
//-------------------------------------------------
for(new i = 0; i < MAX_BIZ; i++)
{
if(BizInfo[i][bizOn] == 1)
{
UpdateBizInfo(i);
}
}
//-------------------------------------------------
for(new i = 0; i < MAX_FACTIONS; i++)
{
if(Factions[i][fON] == 1)
{
SaveFaction(i);
}
}
//-------------------------------------------------
SavePlants();
return 1;
}
Also gave a new error in the console,
[15:17:19] [debug] #0 000acfd8 in AssignHouseWeapons (house=1, str[]=@0x05e8639c "0=0|0=0|0=0|0=0|0=0|0=0|0=0|0=...") at C:\Users\Nick\Desktop\Ingenious!\gamemodes\test2.p wn:11818
Код:
stock AssignHouseWeapons(house, str[])
{
new wtmp[MAX_HOUSE_WEAPONS][64];
explode(wtmp,str,"|");
for(new z = 1; z < MAX_HOUSE_WEAPONS; z++)
{
new wtmp2[2][64];
explode(wtmp2,wtmp[z-1],"=");
HouseInfo[house][hWeapon][z] = strval(wtmp2[0]);
HouseInfo[house][hAmmo][z] = strval(wtmp2[1]);
}
}
Re: Run time error array index out of bounds[+rep] -
justinnater - 05.01.2016
Atleast mark the lines in the code from the debug that points these out.
Re: Run time error array index out of bounds[+rep] -
Jefff - 05.01.2016
Loop is with MAX_HOUSE_WEAPONS (21) but you got hWeapon[10], hAmmo[10] in enum
Re: Run time error array index out of bounds[+rep] -
Matical - 05.01.2016
Updated with marks.