Boost logo

Boost Users :

From: Aubrey, Jason (jason.aubrey_at_[hidden])
Date: 2006-11-01 12:18:55


Thanks David. I'll probably be tied up on other issues for 1-3 days but
I will give this a try when I can.

Regards,
Jason

-----Original Message-----
From: boost-users-bounces_at_[hidden]
[mailto:boost-users-bounces_at_[hidden]] On Behalf Of David Walthall
Sent: Wednesday, November 01, 2006 11:03 AM
To: boost-users_at_[hidden]
Subject: Re: [Boost-users] boost filesystem

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 <malloc.h>
#include <stdlib.h>

// 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;
}

_______________________________________________
Boost-users mailing list
Boost-users_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net