Solved

# Run-time Check Failure #2

Posted on 2009-05-03
252 Views
I'm new to C++ and my program works, but I keep getting the following error:

Run-time check failure #2 - stack around the variable "ranNumArray" was corrupted.

int main (void)

{

int ranNumber;

int ranNumArray[100];

int i;

int numFind;

int arrayPos;

int foundNum = 0;

/* initialize random seed: */

srand (1);

/* generate secret number: */

for(i=0; i< 101; i++) {

ranNumber = rand() % 100 + 1;

ranNumArray[i] = ranNumber;

cout<<i<<" "<<ranNumArray[i]<<endl;

}

int max = ranNumArray[0];

for(int i = 1; i<101; i++)

{

if(ranNumArray[i] > max)

max = ranNumArray[i];

}

cout<<"The Max is "<<max<<endl;

cout<<"Please enter a number to find:";

cin>>numFind;

for(int x = 0; x<101; x++)

{

if(ranNumArray[x] == numFind) {

cout<<"The position of your number is "<<x<<endl;

foundNum = 1;

}

}

if(foundNum == 0){

}

return 0;

}
0
Question by:trifecta2k

LVL 40

Accepted Solution

mrjoltcola earned 500 total points
ID: 24292547
Your problems are the for loops, looping 1 too many. It goes past the end of the array. Array of 100 means 0 - 99 in C++
for(i=0; i< 101; i++)  // 101 slots, one too many

for(int x = 0; x<101; x++) // 101 slots, one too many

//

for(i=0; i< 100; i++)  // 100 slots

for(int x=0; x< 100; x++)  // 100 slots
0

LVL 39

Expert Comment

ID: 24294096
Alternatively to that mrjoltcola said, you could do

for(int i = 1; i<=100; i++)
{
if(ranNumArray[i-1] > max)
...

That way your loop counter is 1-based what might give some benefits if using it as an ID-number.

But actually this is more error-prone than that mrjoltcola suggested.

>>>>      for(int i = 1; i<101; i++)

Never use 101 as upper boundary if the size is 100. That is very error-prone even if using a 1-based counter.

Generally, if using fixed-sized arrays you might consider the following:

for(int i = 0; i < sizeof(ranNumArray)/sizeof(ranNumArray[0]); i++)

With that you could change the size and type of array without having to change the for loop as well.

0

Expert Comment

ID: 24295905
int main (void)
{

int ranNumber;
int ranNumArray[100];
int i;

int numFind;
int arrayPos;
int foundNum = 0;

/* initialize random seed: */
srand (1);

/* generate secret number: */
for(i=0; i< 100; i++) {
ranNumber = rand() % 100 + 1;
ranNumArray[i] = ranNumber;
cout<<i<<" "<<ranNumArray[i]<<endl;
}

int max = ranNumArray[0];

for(int i = 1; i<100; i++)
{
if(ranNumArray[i] > max)
max = ranNumArray[i];
}

cout<<"The Max is "<<max<<endl;

cout<<"Please enter a number to find:";
cin>>numFind;

for(int x = 0; x<100; x++)
{
if(ranNumArray[x] == numFind) {
cout<<"The position of your number is "<<x<<endl;
foundNum = 1;
}

}

if(foundNum == 0){
}

return 0;
}
0

LVL 5

Author Closing Comment

ID: 31577439
Thanks, that worked perfectly.
0

## Featured Post

### Suggested Solutions

This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…