Run time error 4: "Array index out of bounds"
#1

Hello. I need some help with the House System.

Errors in the console:

[debug] Run time error 4: "Array index out of bounds"
[debug] Accessing element at index 15 past array upper bound 7
[debug] AMX backtrace:
[debug] #0 0003c160 in public LoadHouses () from IS.amx

Код:
forward LoadHouses( );
public LoadHouses( )
{
	new rows = cache_num_rows( );
 	if( rows )
  	{
   		new id, loaded, for_sale, label[ 5000 ];
		while( loaded < rows )
		{
  			id = cache_get_field_content_int( loaded, "ID" );
  			
	    	cache_get_field_content( loaded, "HouseName", HouseData[ id ][ Name ], .max_len = MAX_HOUSE_NAME );
		    cache_get_field_content( loaded, "HouseOwner", HouseData[ id ][ Owner ], .max_len = MAX_PLAYER_NAME );
		    cache_get_field_content( loaded, "HousePassword", HouseData[ id ][ Password ], .max_len = MAX_HOUSE_PASSWORD );
		    
		    HouseData[ id ][ houseX ] = cache_get_field_content_float( loaded, "HouseX" );
		    HouseData[ id ][ houseY ] = cache_get_field_content_float( loaded, "HouseY" );
		    HouseData[ id ][ houseZ ] = cache_get_field_content_float( loaded, "HouseZ" );
		    HouseData[ id ][ Price ] = cache_get_field_content_int( loaded, "HousePrice" );
		    HouseData[ id ][ SalePrice ] = cache_get_field_content_int( loaded, "HouseSalePrice" );
		    HouseData[ id ][ Interior ] = cache_get_field_content_int( loaded, "HouseInterior" );
		    HouseData[ id ][ LockMode ] = cache_get_field_content_int( loaded, "HouseLock" );
		    HouseData[ id ][ SafeMoney ] = cache_get_field_content_int( loaded, "HouseMoney" );
		    HouseData[ id ][ LastEntered ] = cache_get_field_content_int( loaded, "LastEntered" );

			format( HouseData[ id ][ Address ], MAX_HOUSE_ADDRESS, "%d, %s, %s", id, GetZoneName( HouseData[ id ][ houseX ], HouseData[ id ][ houseY ], HouseData[ id ][ houseZ ] ), GetCityName( HouseData[ id ][ houseX ], HouseData[ id ][ houseY ], HouseData[ id ][ houseZ ] ) );
	        if( strcmp( HouseData[ id ][ Owner ], "-"))
			{
	            if( HouseData[ id ][ SalePrice ] > 0 )
				{
	                for_sale = 1;
				    format( label, sizeof( label ), "{00CC00}House For Sale {FFFFFF}(ID: {C0C0C0}%d{FFFFFF})\n{FFFFFF}%s\n{FFFFFF}%s\n{FFFFFF}Price: {00CC00}${C0C0C0}%s", id, HouseData[ id ][ Name ], HouseInteriors[ HouseData[ id ][ Interior ] ][ IntName ], convertNumber( HouseData[ id ][ SalePrice ] ) );
				}
				else
				{
				    for_sale = 0;
					format( label, sizeof( label ), "{C0C0C0}%s's House {FFFFFF}(ID: {C0C0C0}%d{FFFFFF})\n{FFFFFF}%s\n{FFFFFF}%s\n%s\n{C0C0C0}%s", HouseData[ id ][ Owner ], id, HouseData[ id ][ Name ], HouseInteriors[ HouseData[ id ][ Interior ] ][ IntName ], LockNames[ HouseData[ id ][ LockMode ] ], HouseData[ id ][ Address ] );
				}
			}
			else
			{
			    for_sale = 1;
         		format( label, sizeof( label ), "{00CC00}House For Sale {FFFFFF}(ID: {C0C0C0}%d{FFFFFF})\n{FFFFFF}%s\n{FFFFFF}Price: {00CC00}${C0C0C0}%s", id, HouseInteriors[ HouseData[ id ][ Interior ] ][ IntName ], convertNumber(HouseData[ id ][ Price ] ) );
	        }
			HouseData[ id ][ HousePickup ] = CreateDynamicPickup((!for_sale) ? 19522 : 1273, 1, HouseData[ id ][ houseX ], HouseData[ id ][ houseY ], HouseData[ id ][ houseZ ] );
			HouseData[ id ][ HouseIcon ] = CreateDynamicMapIcon( HouseData[ id ][ houseX ], HouseData[ id ][ houseY ], HouseData[ id ][ houseZ ], (!for_sale) ? 32 : 31, 0 );
			HouseData[ id ][ HouseLabel ] = CreateDynamic3DTextLabel( label, ~1, HouseData[ id ][ houseX ], HouseData[ id ][ houseY ], HouseData[ id ][ houseZ ] + 0.35, 15.0, .testlos = 1 );
			Iter_Add(Houses, id);
		    loaded++;
	    }
	    printf( "Loaded %d Houses.", loaded );
	}
	return 1;
}
Can someone help me ?
Reply
#2

Seems like you have too many houses, sorry bud' nothing you can do.



Jk. Post the HouseData declaration, along with its enumeration declaration.
Reply
#3

Код:
enum e_house
{
	Name[ MAX_HOUSE_NAME ],
	Owner[ MAX_PLAYER_NAME ],
	Password[ MAX_HOUSE_PASSWORD ],
	Address[ MAX_HOUSE_ADDRESS ],
	Float:houseX,
	Float:houseY,
	Float:houseZ,
	Price,
	SalePrice,
	Interior,
	LockMode,
	SafeMoney,
	LastEntered,
	Text3D: HouseLabel,
	HousePickup,
	HouseIcon,
	bool:Save
};
Код:
new HouseData[ MAX_HOUSES ][ e_house ];
MAX_HOUSES is defined like:
#define MAX_HOUSES 2000

** In my MySQL database i have: 1,125 rows ( houses ).
Reply
#4

After this: id = cache_get_field_content_int( loaded, "ID" );

Input "printf("On ID %i", id);", run it and see the highest number it pops up.
Reply
#5

Код:
On ID 1
On ID 2
On ID 3
On ID 4
On ID 5
On ID 6
On ID 7
On ID 8
On ID 9
On ID 10
On ID 11
On ID 12
On ID 13
On ID 14
On ID 15
On ID 16
On ID 17
On ID 18
On ID 19
On ID 20
On ID 21
On ID 22
On ID 23
On ID 24
On ID 25
On ID 26
On ID 27
On ID 28
On ID 29
On ID 30
On ID 31
On ID 32
On ID 33
On ID 34
On ID 35
On ID 36
On ID 37
On ID 38
On ID 39
On ID 40
On ID 41
On ID 42
On ID 43
On ID 44
On ID 45
On ID 46
On ID 47
On ID 48
On ID 49
On ID 50
On ID 51
On ID 52
On ID 53
On ID 54
On ID 55
On ID 56
On ID 57
On ID 58
On ID 59
On ID 60
On ID 61
On ID 62
On ID 63
On ID 64
On ID 65
On ID 66
On ID 67
On ID 68
On ID 69
On ID 70
On ID 71
On ID 72
On ID 73
On ID 74
On ID 75
On ID 76
On ID 77
On ID 78
On ID 79
On ID 80
On ID 81
On ID 82
On ID 83
On ID 84
On ID 85
On ID 86
On ID 87
On ID 88
On ID 89
On ID 90
On ID 91
On ID 92
On ID 93
On ID 94
On ID 95
On ID 96
On ID 97
On ID 98
On ID 99
On ID 100
On ID 101
On ID 102
On ID 103
On ID 104
On ID 105
On ID 106
On ID 107
On ID 108
On ID 109
On ID 110
On ID 111
On ID 112
On ID 113
On ID 114
On ID 115
On ID 116
On ID 117
On ID 118
On ID 119
The last house ID is 119.
You were right that's the problem i have too many houses.
Do you know how to fix it ? :P
Reply
#6

Reinstall windows.

But besides that, print out the lengths on row 119, when you assign these values:
Name[ MAX_HOUSE_NAME ]
Owner[ MAX_PLAYER_NAME ]
Password[ MAX_HOUSE_PASSWORD ]
Address[ MAX_HOUSE_ADDRESS ]

Perhaps they have too many characters.
Reply
#7

In LoadHouses public the problem is at this:

Код:
                    HouseData[ id ][ houseX ] = cache_get_field_content_float( loaded, "HouseX" );
		    HouseData[ id ][ houseY ] = cache_get_field_content_float( loaded, "HouseY" );
		    HouseData[ id ][ houseZ ] = cache_get_field_content_float( loaded, "HouseZ" );
		    HouseData[ id ][ Price ] = cache_get_field_content_int( loaded, "HousePrice" );
		    HouseData[ id ][ SalePrice ] = cache_get_field_content_int( loaded, "HouseSalePrice" );
		    HouseData[ id ][ Interior ] = cache_get_field_content_int( loaded, "HouseInterior" );
		    HouseData[ id ][ LockMode ] = cache_get_field_content_int( loaded, "HouseLock" );
		    HouseData[ id ][ SafeMoney ] = cache_get_field_content_int( loaded, "HouseMoney" );
		    HouseData[ id ][ LastEntered ] = cache_get_field_content_int( loaded, "LastEntered" );
if i put this between /* */ the houses loads.
Код:
Loaded 1125 Houses.
That code is important and i have no ideea what problem is there..
Reply
#8

Time for debugging.. and everyone goes "yay" because it's very boring in pawn since you can't debug it as easily as you wish you could! \o/

Comment all lines and then uncomment one by one and see which line is problematic, once you find the one or multiple problematic ones, print them out and see the result.
Reply
#9

And now i saw that the problem is just when this is there: HouseData[ id ][ Interior ] = cache_get_field_content_int( loaded, "HouseInterior" );
Reply
#10

Oh i think i know what's the problem.
My house interior are just up to 7.
And i have some interior there are defined in Database up to 15.
I'll reply after i'll modiffy that.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)