S
Scotty
I'm a C++ novice and need help figuring out some odd behavior I've
encountered.
Here's the situation: I create a class and have its constructor store a
random number in a private "number" variable. The class also has a
"getNumber()" function that returns its stored number. A function in the
program creates five objects of this class and five pointers to these
objects, the latter of which are stored in a global array. When
"getNumber()" is called from the function that created these objects,
the correct number is returned. However, when called from a different
function, the returned number skyrockets! Here's an example from the
compiled program:
-Program output-
First display:
dummyArray[0]->getNumber(): 1
dummyArray[1]->getNumber(): 7
dummyArray[2]->getNumber(): 4
dummyArray[3]->getNumber(): 0
dummyArray[4]->getNumber(): 9
Second display:
dummyArray[0]->getNumber(): 4469728
dummyArray[1]->getNumber(): 4200022
dummyArray[2]->getNumber(): 2359128
dummyArray[3]->getNumber(): 4456499
dummyArray[4]->getNumber(): 2359104
An interesting fact is that when I omit the "dummyFunction2()" call in
the code below, I get a different result:
-Program output-
First display:
dummyArray[0]->getNumber(): 1
dummyArray[1]->getNumber(): 7
dummyArray[2]->getNumber(): 4
dummyArray[3]->getNumber(): 0
dummyArray[4]->getNumber(): 9
Second display:
dummyArray[0]->getNumber(): 1
dummyArray[1]->getNumber(): 7
dummyArray[2]->getNumber(): 4
dummyArray[3]->getNumber(): 4456499
dummyArray[4]->getNumber(): 2359104
Does anyone have an idea as to what's causing these strange occurrences?
Are there errors in my code? (See below!)
Here's the complete source code for the example program:
---CODE STARTS HERE---
#include <cstdlib>
#include <iostream>
using namespace std;
class Dummy{
public:
Dummy();
int getNumber();
private:
int number;
};
Dummy:ummy(){
number=rand()%10;
}
int Dummy::getNumber(){
return number;
}
void dummyFunction1();
void dummyFunction2();
void dummyFunction3();
Dummy *dummyArray[5];
int main(){
dummyFunction1();
dummyFunction2();
dummyFunction3();
system("pause");
return 0;
}
void dummyFunction1(){
Dummy d1, d2, d3, d4, d5;
Dummy *d1Ptr=&d1, *d2Ptr=&d2, *d3Ptr=&d3, *d4Ptr=&d4, *d5Ptr=&d5;
dummyArray[0]=d1Ptr;
dummyArray[1]=d2Ptr;
dummyArray[2]=d3Ptr;
dummyArray[3]=d4Ptr;
dummyArray[4]=d5Ptr;
cout << "First display:\n";
cout << "dummyArray[0]->getNumber(): " << dummyArray[0]->getNumber()
<< "\n";
cout << "dummyArray[1]->getNumber(): " << dummyArray[1]->getNumber()
<< "\n";
cout << "dummyArray[2]->getNumber(): " << dummyArray[2]->getNumber()
<< "\n";
cout << "dummyArray[3]->getNumber(): " << dummyArray[3]->getNumber()
<< "\n";
cout << "dummyArray[4]->getNumber(): " << dummyArray[4]->getNumber()
<< "\n";
}
void dummyFunction2(){
cout << "\n";
}
void dummyFunction3(){
cout << "Second display:\n";
cout << "dummyArray[0]->getNumber(): " << dummyArray[0]->getNumber()
<< "\n";
cout << "dummyArray[1]->getNumber(): " << dummyArray[1]->getNumber()
<< "\n";
cout << "dummyArray[2]->getNumber(): " << dummyArray[2]->getNumber()
<< "\n";
cout << "dummyArray[3]->getNumber(): " << dummyArray[3]->getNumber()
<< "\n";
cout << "dummyArray[4]->getNumber(): " << dummyArray[4]->getNumber()
<< "\n\n";
}
---CODE ENDS HERE---
Thanks!
Scotty
encountered.
Here's the situation: I create a class and have its constructor store a
random number in a private "number" variable. The class also has a
"getNumber()" function that returns its stored number. A function in the
program creates five objects of this class and five pointers to these
objects, the latter of which are stored in a global array. When
"getNumber()" is called from the function that created these objects,
the correct number is returned. However, when called from a different
function, the returned number skyrockets! Here's an example from the
compiled program:
-Program output-
First display:
dummyArray[0]->getNumber(): 1
dummyArray[1]->getNumber(): 7
dummyArray[2]->getNumber(): 4
dummyArray[3]->getNumber(): 0
dummyArray[4]->getNumber(): 9
Second display:
dummyArray[0]->getNumber(): 4469728
dummyArray[1]->getNumber(): 4200022
dummyArray[2]->getNumber(): 2359128
dummyArray[3]->getNumber(): 4456499
dummyArray[4]->getNumber(): 2359104
An interesting fact is that when I omit the "dummyFunction2()" call in
the code below, I get a different result:
-Program output-
First display:
dummyArray[0]->getNumber(): 1
dummyArray[1]->getNumber(): 7
dummyArray[2]->getNumber(): 4
dummyArray[3]->getNumber(): 0
dummyArray[4]->getNumber(): 9
Second display:
dummyArray[0]->getNumber(): 1
dummyArray[1]->getNumber(): 7
dummyArray[2]->getNumber(): 4
dummyArray[3]->getNumber(): 4456499
dummyArray[4]->getNumber(): 2359104
Does anyone have an idea as to what's causing these strange occurrences?
Are there errors in my code? (See below!)
Here's the complete source code for the example program:
---CODE STARTS HERE---
#include <cstdlib>
#include <iostream>
using namespace std;
class Dummy{
public:
Dummy();
int getNumber();
private:
int number;
};
Dummy:ummy(){
number=rand()%10;
}
int Dummy::getNumber(){
return number;
}
void dummyFunction1();
void dummyFunction2();
void dummyFunction3();
Dummy *dummyArray[5];
int main(){
dummyFunction1();
dummyFunction2();
dummyFunction3();
system("pause");
return 0;
}
void dummyFunction1(){
Dummy d1, d2, d3, d4, d5;
Dummy *d1Ptr=&d1, *d2Ptr=&d2, *d3Ptr=&d3, *d4Ptr=&d4, *d5Ptr=&d5;
dummyArray[0]=d1Ptr;
dummyArray[1]=d2Ptr;
dummyArray[2]=d3Ptr;
dummyArray[3]=d4Ptr;
dummyArray[4]=d5Ptr;
cout << "First display:\n";
cout << "dummyArray[0]->getNumber(): " << dummyArray[0]->getNumber()
<< "\n";
cout << "dummyArray[1]->getNumber(): " << dummyArray[1]->getNumber()
<< "\n";
cout << "dummyArray[2]->getNumber(): " << dummyArray[2]->getNumber()
<< "\n";
cout << "dummyArray[3]->getNumber(): " << dummyArray[3]->getNumber()
<< "\n";
cout << "dummyArray[4]->getNumber(): " << dummyArray[4]->getNumber()
<< "\n";
}
void dummyFunction2(){
cout << "\n";
}
void dummyFunction3(){
cout << "Second display:\n";
cout << "dummyArray[0]->getNumber(): " << dummyArray[0]->getNumber()
<< "\n";
cout << "dummyArray[1]->getNumber(): " << dummyArray[1]->getNumber()
<< "\n";
cout << "dummyArray[2]->getNumber(): " << dummyArray[2]->getNumber()
<< "\n";
cout << "dummyArray[3]->getNumber(): " << dummyArray[3]->getNumber()
<< "\n";
cout << "dummyArray[4]->getNumber(): " << dummyArray[4]->getNumber()
<< "\n\n";
}
---CODE ENDS HERE---
Thanks!
Scotty