When you declare variable: int scores;
scores keep an address of memory allocated to this variable, for example: scores = 0x80000000
by writing scores, , , etc. to this address is added a step, which is size in byte of variable type. In this case it is int, which is 4 bytes.
1 2 3 4
scores is 0x80000004
scores is 0x80000008
scores is 0x80000014
So by writing scores = 23 you just set value to non or allocated memory.
It is programmer job to check array index when writing to it
Shouldn't the above code be generating an error since I am exceeding the limit of Array
It doesn't generate an error simply because the subscript is larger than the size of the array, as there is no code which performs that check - you have to write it yourself.
However, modifying memory which is not owned by the program will cause an error, but the nature of that error is unpredictable. It could corrupt some other data and hence cause some apparently unrelated code to misbehave.
Or the program may execute with no visible sign of error (though the code is still wrong) and may go undetected until you start to demonstrate the program to your boss, or to an important customer, when it will almost certainly crash in a spectacular fashion :)
I use VC++ 2010 Express and if I do something like that, it will throw up an error and end the program. Check your compiler options and see if you can increase the warning/error level. Also, if your using the beta 5 of dev C++, may I suggest switch down to an earlier, more stable version as that compiler hasn't been actively developed in years.
MS Visual C++ 2010 Express is a free version, and if you don't get a FREE key from Microsoft, it works for 30 days. A quick and easy registration will get you unlimited access. You can also download most of the other stuff that would come with a professional edition, for free, from the Microsoft site in individual packages to make one large complete package.