Assert fails when destructing combination of GAlib objects
Wendy van Olmen
s985104 at uia.ua.ac.be
Fri Mar 22 05:12:24 EST 2002
(I know it's a long mail, but if you think you know what you are doing,
please don't let this scare you! I just tried to make everything as
clear as possible and I could really do with the help.)
I am a final year student and currently I am working on my thesis. Using
genetic algorithms I try to optimize the load and balance of air cargo.
The datastructure I am using to represent possible solutions is based on
a combination of classes provided by GAlib.
It all boils down to:
GA1DArrayGenome< GA1DArrayAlleleGenome<int> >
When I tried to use it like this (in Microsoft Visual Studio) there
where some problems. I suspect because of the 'template in the
template', but I don't remember exactly.
That's why I made some wrapper class PartialGenome and I use genomes of
type
GA1DArrayGenome< PartialGenome >
PartialGenome just contains one member of type
GA1DArrayAlleleGenome<int>. The constructors and destructors I supplied
only (implicitely) pass on the work to the GAlib constructors and
destructors of the member. So I really don't see anything that could go
wrong here.
Everything works fine when I use GA1DArrayGenome<PartialGenome> of size
2, but when I need three or more PartialGenomes something goes wrong at
the destruction fase.
I get the following message:
Debug Assertion Failed:
_CrtIsValidHeapPointer(pUserData)
This refers to a line in \VC98\CRT\SRC\DBGHEAP.C:
/* If this ASSERT fails, a bad pointer has been passed
/* in. It may be totally bogus, or it may have been
/* allocated from another heap. The pointer MUST come
/* from the 'local' heap. */
_ASSERTE(_CrtIsValidHeapPointer(pUserData));
(So it has nothing to do with the void* userData of GAlib!)
I am calling my optimization function (in which I use GAlib) from a Java
application through the Java Native Interface. This works fine. The
down-side is that I can't properly debug. The only help I get is this
trace:
(~ procedure call stack)
_free_dbg_lk(void*, int)
_free_dbg(void*, int)
free(void*)
operator delete(void*)
GAArray<int>::~GAArray<int> ()
GA1DArrayGenome<int>::~GA1DArrayGenome<int> ()
GA1DArrayAlleleGenome<int>::~GA1DArrayAlleleGenome<int>
(*) PartialGenome::~PartialGenome()
GAArray<PartialGenome>::~GAArray<PartialGenome>()
GA1DArrayGenome<PartialGenome>::~GA1DArr...
GAPopulation::~GAPopulation()
GASimpleGA::~GASimpleGA().
It always goes wrong at the destruction of the third PartialGenome at
line (*).
To be able to get on with my testing I commented out the line
delete [] a;
in virtual ~GAArray() in GAArray.h . I know this results in a major
memory leak, but desperate situations call for desperate measures.
This is where you come in to play:
if you have any idea on what goes wrong, where it goes wrong, why it
goes wrong or what I can do about it, please let me know, because
valuable time is ticking away!
If you've made it this far I would like to thank you for the effort. I
hope to hear from you soon.
Kind regards,
Wendy van Olmen
Mathematics - Computer Science
University Of Antwerp
More information about the galib
mailing list