std::Vector, classes and pointer questions

V

Venn Syii

I've searched all the forums but cannot find an answer to this question.

I do the following:

vector<MyClass*> myClassList;

Later in the program I try to add to myClassList with a .push_back(...)
I get an "out of memory" runtime error. I know I'm not out of memory
because normal vectors such as vector<int> a, still work, and still work
fine.
I've tried the following .push_back's

1) myClassList.push_back(new MyClass)
2) myClassList.push_back(new MyClass())
3) MyClass *Temp = new MyClass;
myClassList.push_back(Temp)

I have also tried changing the vector to
vector<MyClass> myClassList;

And have tried .push_back(..) in many different ways with it also. No luck,
still "out of memory" runtime error.

MyClass is defined as follows:

class MyClass
{
AnotherClass* AClass;
int a;
int b;
char * a;
char *b;

MyClass() {};
~MyClass() {};
void Create() {AClass = new AnotherClass;};
void Destroy() {if(AClass) delete(AClass); AClass = NULL};

}
I've also tried changing AnotherClass* AClass to AnotherClass AClass and
still the same problem.

Questions:
1) What could be causing the vector to show an "out of memory" error?
2) All the tutorials I've read use simple types in their vectors... what is
the proper way to use vectors with created classes and pointers?

Best Regards,
Venn
 
A

Artie Gold

Venn said:
I've searched all the forums but cannot find an answer to this question.

I do the following:

vector<MyClass*> myClassList;

Later in the program I try to add to myClassList with a .push_back(...)
I get an "out of memory" runtime error. I know I'm not out of memory
because normal vectors such as vector<int> a, still work, and still work
fine.
I've tried the following .push_back's

1) myClassList.push_back(new MyClass)
2) myClassList.push_back(new MyClass())
3) MyClass *Temp = new MyClass;
myClassList.push_back(Temp)

I have also tried changing the vector to
vector<MyClass> myClassList;

And have tried .push_back(..) in many different ways with it also. No luck,
still "out of memory" runtime error.

MyClass is defined as follows:

class MyClass
{
AnotherClass* AClass;
int a;
int b;
char * a;
char *b;

MyClass() {};
~MyClass() {};
void Create() {AClass = new AnotherClass;};
void Destroy() {if(AClass) delete(AClass); AClass = NULL};

}
I've also tried changing AnotherClass* AClass to AnotherClass AClass and
still the same problem.

Questions:
1) What could be causing the vector to show an "out of memory" error?
2) All the tutorials I've read use simple types in their vectors... what is
the proper way to use vectors with created classes and pointers?

Best Regards,
Venn
Post minimal *real* (compilable, runnable) code that exhibits the problem.

Using my crystal ball, however, leads me to believe that you're
corrupting your free store, probably by deleting the contained pointer
to `AnotherClass' twice.

HTH,
--ag
 
V

Venn Syii

Well, considering that I've tried on the magnitude of about 35 things...
which "compilable" set of code would you like? You'd probably have a
problem with that also...

The fact is that I haven't deleted the contained pointer 'AnotherClass'
twice... I haven't been able to get to that point yet. Try these three
lines of 'compilable code' and you'll get the same effect:

vector<int*> a;
a.push_back(new int(1));
//or
a.push_back(new int);
//or

Now when I do
vector<int> a;
a.push_back(10);
//All is good....

On further inpsection,
vector<MyClass*> MyList;
int a = MyList.size();
// a in the debugger comes out to be -100137 or something in that
//area... not "0"

If, "Using my crystal ball, however, leads me to believe that you're
corrupting your free store, probably by deleting the contained pointer to
`AnotherClass' twice." is the best post you could come up with... why even
post? Use your 'crystal' ball to find another post or better yet.... use it
to find the 'compilable code' and it's solution. Thanks. :)

Regards,
Venn
 
P

Peter Koch Larsen

Venn Syii said:
I've searched all the forums but cannot find an answer to this question.

I do the following:

vector<MyClass*> myClassList;


[snip]


And have tried .push_back(..) in many different ways with it also. No
luck, still "out of memory" runtime error.

MyClass is defined as follows:

class MyClass
{
AnotherClass* AClass;

[snip]

Questions:
1) What could be causing the vector to show an "out of memory" error? corrupted heap.
2) All the tutorials I've read use simple types in their vectors... what
is the proper way to use vectors with created classes and pointers? Same as for a simple type.
When learning C++ wait playing with pointers before you know the language.
This is most surely the correct way to learn C++, and most surely you do not
need to know about pointers at this stage in your education.

Kind regards
Peter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,201
Messages
2,571,049
Members
47,652
Latest member
Campbellamy

Latest Threads

Top