2D arrays question ??

This topic is 3184 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

Recommended Posts

sorry if this is a stupid question, but I'm testing out some arrays stuff, and I received this error: Run-Time Check Failure #2 - Stack around the variable 'array1' was corrupted. this is the code:

#include <iostream>

using namespace std;

int main(int argc, char *argv[]){

int array1[5][5];
int puts=1;

for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){

array1[i][j]=puts;
cout<<array1[i][j]<<"\t";
puts++;

}
cout<<endl;
}

system("pause");
return 0;
}



Share on other sites
Arrays in programming are (almost?) always 0 based. That is, the first item is at [0] not at [1]

for(int i=1;i<=5;i++) {for(int j=1;j<=5;j++) {

should be

for(int i=0;i<5;i++) {for(int j=0;j<5;j++) {

-me

Share on other sites
Array indices go from 0 to size - 1; not 1 to size.

Share on other sites
wow im foolish lol, thanks

Share on other sites
Quote:
 Original post by Palidinefor(int i=0;i<5;i++) {for(int j=0;j<5;j++) {

You just made it have six terms. It should only be five.
the way it should be put:
for(int i=0;i<4;i++) {for(int j=0;j<4;j++) {

Share on other sites
@X19OV1: Palidine's code is fine, it runs from 0 to 4 (not 5, because 5 is not lower than 5, so the loop will bail out there). Your code only runs up to 3.

Share on other sites
Quote:
 Original post by Captain PYour code only runs up to 3.

How does my code only run up to 3?

Share on other sites
Try it. Look at the output:
#include <iostream>int main(int, char **) {  for(int j=0;j<4;j++) std::cout << j << std::endl;}

Share on other sites
Hmmm, I thought it was counted:
0, 1, 2, 3, 4
I see now. It's written as: <4.^^

Share on other sites
Because j < 4, the only way that is possible it at 3 or less. So it can never reach 4.

theTroll

Share on other sites
Your for loop breaks down like so:
int j=0;beginning:if !(j < 4) goto end;{  // for loop body}j++goto beginning;end:

So the first time through the loop j is 0, which is less than 4, so it goes through the body and gets incremented to 1. 1 is less than 4, so it goes through the body and gets incremented to 2. 2 is less than 4, so it goes through the body and gets incremented to 3. 3 is less than 4, so it goes through the body and gets incremented to 4. 4 is not less than 4, so it skips the body and goes to the end.