Aubrey, Jason wrote:
Hi,
When I run the following program it runs successfully but throws an
exception during shutdown. I don't know why, but it seems that the call
to boost::filesystem::file_size() is corrupting memory somehow. This
example only shows the call to file_size() but I think I've seen similar
trouble with other calls within boost::filesystem.
Am I doing something wrong here or is this a bug?
Regards,
Jason Aubrey
Jason,
When something like this happens, I have a function that checks all of
the heap for corruption errors. If you place enough calls to this
function, you can use it to find where the corruption happens.
David
#include
#include
// HeapCheckWin32()
// ----------------
// Sends an output to the TRACE() function with the
// status of the heap. (Actually, it seems to hit
// an assert inside of _heapwalk when there is an error.)
// Returns 0 for ok, non-zero for error.
int HeapCheckWin32()
{
_HEAPINFO hinfo;
int heapstatus;
int retStatus = 1; // start with error status
hinfo._pentry = NULL;
do
{
heapstatus = _heapwalk(&hinfo);
} while(heapstatus == _HEAPOK);
switch(heapstatus)
{
case _HEAPEMPTY:
TRACE("OK - empty heap\n");
retStatus = 0;
break;
case _HEAPEND:
TRACE("OK - end of heap\n");
retStatus = 0;
break;
case _HEAPBADPTR:
TRACE("ERROR - bad pointer to heap\n");
retStatus = 1;
break;
case _HEAPBADBEGIN:
TRACE("ERROR - bad start of heap\n");
retStatus = 1;
break;
case _HEAPBADNODE:
TRACE("ERROR - bad node in heap\n");
retStatus = 1;
break;
default:
retStatus = 2;
break;
}
return retStatus;
}