I am writing a win32 application and my program compiles and runs. Then when I close it I get a Debug Assertion Failed Message.
The expression is:
_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
My program has the following classes:
I have managed to narrow it down to the following lines of code that are causing the problem. I did this by commenting everything out and then bringing code back in till the error occured.Code:class zone; class waypoints { private: int *w_coordinates; int number_of_w_squares; zone *zone1; zone *zone2; public: void set_w_coordinates(int pos_x, int pos_y, int a); void setup(int num_squares, zone &a, zone &b); zone* GetZone1(); zone* GetZone2(); int GetCoordinate0(); int GetCoordinate1(); ~waypoints(); }w_1,w_2,w_3,w_4; void waypoints::setup(int num_squares, zone &a, zone &b) { number_of_w_squares = num_squares; w_coordinates = new int[num_squares]; zone1 = &a; zone2 = &b; } void waypoints::set_w_coordinates(int x, int y, int b) { b = b*2; w_coordinates[b] = x; w_coordinates[b+1] = y; } waypoints::~waypoints() { delete [] w_coordinates; w_coordinates = NULL; } zone* waypoints::GetZone1() { return zone1; } zone* waypoints::GetZone2() { return zone2; } int waypoints::GetCoordinate0() { return w_coordinates[0]; } int waypoints::GetCoordinate1() { return w_coordinates[1]; } class zone { private: int number_of_squares, number_of_interfaces; int *coordinates; public: vector <waypoints> interfaces; void setup(int a, int b); void set_coordinates(int i, int pos_x, int pos_y); void set_interfaces(waypoints *a); bool IsInZone(int x, int y); int GetSquaresNumber(); int GetSquareCoordinate(int i); int GetNumberOfInterfaces(); ~zone(); }zone_main_corridor,zone_adjoining_corridor_lstairs,zone_adjoining_corridor_rstairs,zone_stairs,zone_offices_corridor; void zone::setup(int a, int b) { number_of_squares = a; coordinates = new int[a]; number_of_interfaces = b; } zone::~zone() { delete [] coordinates; coordinates = NULL; interfaces.erase(interfaces.begin(),interfaces.end()); } void zone::set_coordinates(int i, int pos_x, int pos_y) { coordinates[i] = pos_x; coordinates[i+1] = pos_y; } void zone::set_interfaces(waypoints *a) { interfaces.push_back(*a); } bool zone::IsInZone(int x, int y) { for (int i=0; i<number_of_squares; i++) { if (coordinates[i*2] == x && coordinates[(i*2)+1] == y) { return TRUE; } } return FALSE; } int zone::GetSquaresNumber() { return number_of_squares; } int zone::GetSquareCoordinate(int i) { return coordinates[i]; } int zone::GetNumberOfInterfaces() { return number_of_interfaces; }
I don't understand why the message is occuring. I have made sure that I am calling the destructor on all instances of zone and waypoints on program closure.Code:zone_main_corridor.set_interfaces(&w_1); zone_adjoining_corridor_lstairs.set_interfaces(&w_1); zone_adjoining_corridor_lstairs.set_interfaces(&w_2); zone_stairs.set_interfaces(&w_2); zone_stairs.set_interfaces(&w_3); zone_adjoining_corridor_rstairs.set_interfaces(&w_3); zone_adjoining_corridor_rstairs.set_interfaces(&w_4); zone_offices_corridor.set_interfaces(&w_4);



LinkBack URL
About LinkBacks


