Fixed segfault which occured when open ing the module editor, loading a module, closing it, and opening the module editor again. This was

caused by prematurely deleting the module editor's m_Pcb pointer, which has the same value (points to the same structure) as 
g_ModuleEditor_Pcb hence should not be 
deleted.
This commit is contained in:
lifekidyeaa 2008-03-14 05:47:35 +00:00
parent fb54ab8649
commit 6d609d1837
5 changed files with 6 additions and 5 deletions

View File

@ -21,7 +21,7 @@
#include <vector> #include <vector>
#ifndef SAFE_DELETE #ifndef SAFE_DELETE
#define SAFE_DELETE(p) delete (p); (p) = NULL; #define SAFE_DELETE(p) delete (p); (p) = NULL; //C++ guarantees that operator delete checks its argument for null-ness
#endif #endif
#define INTERNAL_UNIT_TYPE 0 // Internal unit = inch #define INTERNAL_UNIT_TYPE 0 // Internal unit = inch

View File

@ -68,7 +68,8 @@ WinEDA_BasePcbFrame::~WinEDA_BasePcbFrame( void )
void WinEDA_BasePcbFrame::SetBOARD( BOARD* aBoard ) void WinEDA_BasePcbFrame::SetBOARD( BOARD* aBoard )
{ {
delete m_Pcb; if(m_Pcb != g_ModuleEditor_Pcb)
delete m_Pcb;
m_Pcb = aBoard; m_Pcb = aBoard;
} }

View File

@ -382,7 +382,7 @@ TRACK* Locate_Piste_Connectee( TRACK* PtRefSegm, TRACK* pt_base,
if( PtSegmN == PtRefSegm ) if( PtSegmN == PtRefSegm )
goto suite; goto suite;
/* max_dist is the max distance between 2 tack ends which ensure a copper continuty */ /* max_dist is the max distance between 2 track ends which ensure a copper continuty */
max_dist = (PtSegmN->m_Width + PtRefSegm->m_Width)/2; max_dist = (PtSegmN->m_Width + PtRefSegm->m_Width)/2;
if( IsPointsAreNear(pos_ref, PtSegmN->m_Start, max_dist) ) if( IsPointsAreNear(pos_ref, PtSegmN->m_Start, max_dist) )

View File

@ -136,7 +136,7 @@ WinEDA_ModuleEditFrame::WinEDA_ModuleEditFrame( wxWindow* father, WinEDA_App* pa
m_Pcb->m_PcbFrame = this; m_Pcb->m_PcbFrame = this;
m_CurrentScreen = ScreenModule; m_CurrentScreen = ScreenModule;
SetCurItem( NULL ); m_CurrentScreen->SetCurItem( NULL );
GetSettings(); GetSettings();
wxSize GridSize( 500, 500 ); wxSize GridSize( 500, 500 );

View File

@ -250,7 +250,7 @@ WinEDA_PcbFrame::~WinEDA_PcbFrame()
m_Parent->m_PcbFrame = NULL; m_Parent->m_PcbFrame = NULL;
m_CurrentScreen = ScreenPcb; m_CurrentScreen = ScreenPcb;
delete m_drc; delete m_drc;
delete m_Pcb; if(m_Pcb != g_ModuleEditor_Pcb) delete m_Pcb;
} }