943,659 Members | Top Members by Rank

Ad:
  • C++ Discussion Thread
  • Unsolved
  • Views: 7389
  • C++ RSS
Feb 16th, 2004
0

Creating and destroying objects

Expand Post »
Hi

After getting great help with my first post here I thought I would try again. I need to create a (dynamic) number of objects of two types, eggs and fry. I then need to be able to delete the fry and then make a new group of fry objects with all the info from the members of the egg objects (i.e. the egg objects will become the new fry objects). the number of objects will vary so I cannot just over write the old values. I have some code that actually works, but as the program exits a Windows error box appears. I am thinking some sort of memory problem but I am stumped. My code is:

#include <iostream>

#include <stdlib.h>

using namespace std;

#include "class1.hpp"

#include "class2.hpp"

int main()

{

Stage1 *eggs;

eggs = new Stage1[3];

for(int i=0;i<3;i++)

{

cout << "Egg number " << i << " Age " << eggs[i].getAge() << " Weight " << eggs[i].getWeight() << endl;

}

Stage2 *fry;

fry = new Stage2[3];

cout << endl;

for(int i=0;i<3;i++)

{

cout << "Fry number " << i << " Age " << fry[i].getAge() << " Weight " << fry[i].getWeight() << endl;

}

delete [] fry;

cout << endl;

for(int i=0;i<3;i++)

{

Stage2 *fry;

fry = new Stage2[i];

fry[i].setAge( eggs[i].getAge() );

fry[i].setWeight( eggs[i].getWeight() );

cout << "New Fry number " << i << " Age " << fry[i].getAge() << " Weight " << fry[i].getWeight() << endl;

}

cin.get();

return 0;

}

The header files are:

class1.hpp

//********************************************

class Stage1

{

public:

Stage1();

~Stage1();

int getAge() {return itsAge;}

void setAge (int Age) {itsAge = Age;}

int getWeight () {return itsWeight;}

void setWeight (int Weight) {itsWeight = Weight;}

protected:

int itsAge;

int itsWeight;

};

Stage1:tage1():

itsAge(1),

itsWeight(5)

{

}

Stage1::~Stage1()

{

}

class2.hpp

//********************************************

class Stage2

{

public:

Stage2();

~Stage2();

int getAge() {return itsAge;}

void setAge (int Age) {itsAge = Age;}

int getWeight () {return itsWeight;}

void setWeight (int Weight) {itsWeight = Weight;}

protected:

int itsAge;

int itsWeight;

};

Stage2:tage2():

itsAge(2),

itsWeight(9)

{

}

Stage2::~Stage2()

{

}





As I said, this works fine and I get the correct values, however on program exit I get an error box saying errors have been generated and the top of the log file looks like this:

Application exception occurred:

App: (pid=680)

When: 12/5/2003 @ 14:50:59.859

Exception number: c0000005 (access violation)

Please help

Fishman
PS I know this code could have been done better with derived or virtual classes but it is just to try to illustrate my problem
Similar Threads
Reputation Points: 10
Solved Threads: 0
Newbie Poster
fishman is offline Offline
7 posts
since Jan 2004
Feb 18th, 2004
0

Re: Creating and destroying objects

Hi Fishman, I believe I've seen you post this on another forum and had a response there already. Are you sorted now or still having a problem?
Bob
Team Colleague
Reputation Points: 15
Solved Threads: 2
Junior Poster
Bob is offline Offline
129 posts
since Feb 2003
Feb 20th, 2004
0

Re: Creating and destroying objects

Hi Bob

Sorry if cross posting is frowned upon, my impatience got the better of me! I have not been able to log onto the other forum (I think their server is playing up) but have been trying to solve the problem on my own and think I have succeeded, at least I have some working code. I think the problem with the original was that I was creating objects in different scopes. The first batch of fry were made in the main function, the second batch were in curly brackets in an if loop. If I try to do all from the main function it all seems to work.

int noeggs = 5, nofry = 5;

Stage1 *eggs;
eggs = new Stage1[noeggs](5);
cout << "Eggs age is " << eggs[1].getAge() << endl;


Stage2 *fry;
fry = new Stage2[nofry](10);
cout << "Fry age is " << fry[1].getAge() << endl;
delete [] fry;
fry = new Stage2[noeggs](0);
cout << "new fry age is " << fry[1].getAge() << endl;

fry[1].setAge(eggs[1].getAge());
cout << "reset fry age is " << eggs[1].getAge() << endl;

This is a bit of code to show how I solved the problem, it illustrates how I now creata and destroy and re-create the objects in the main function and pass the egg ages to the fry. I will post the reply from the other forum when I can log on for others information and will not cross post in future.
fishman
Reputation Points: 10
Solved Threads: 0
Newbie Poster
fishman is offline Offline
7 posts
since Jan 2004
Feb 20th, 2004
0

Re: Creating and destroying objects

oooops, last line should have read


cout << "reset fry age is " << fry[1].getAge() << endl;
Reputation Points: 10
Solved Threads: 0
Newbie Poster
fishman is offline Offline
7 posts
since Jan 2004
Feb 20th, 2004
0

Re: Creating and destroying objects

Quote originally posted by fishman ...
Hi Bob

Sorry if cross posting is frowned upon, my impatience got the better of me!
No, there's no reason why you can't post to multiple sites. It's not a problem.
Bob
Team Colleague
Reputation Points: 15
Solved Threads: 2
Junior Poster
Bob is offline Offline
129 posts
since Feb 2003

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C++ Forum Timeline: How do you add animation to visual C++ program?
Next Thread in C++ Forum Timeline: Cannot get switch to execute





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC