| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: memcheck.cpp
- // Purpose: Memory-checking sample
- // Author: Julian Smart
- // Modified by:
- // Created: 04/01/98
- // Copyright: (c) Julian Smart
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- // For compilers that support precompilation, includes "wx.h".
- #include "wx/wxprec.h"
- #ifdef __BORLANDC__
- #pragma hdrstop
- #endif
- #ifndef WX_PRECOMP
- #include "wx/wx.h"
- #endif
- #include "wx/datetime.h"
- #ifndef wxHAS_IMAGES_IN_RESOURCES
- #include "../sample.xpm"
- #endif
- #ifndef __WXDEBUG__
- #error This program must be compiled in debug mode.
- #endif
- // Normally, new is automatically defined to be the
- // debugging version. If not, this does it.
- #if !defined(new) && defined(WXDEBUG_NEW) && wxUSE_MEMORY_TRACING && wxUSE_GLOBAL_MEMORY_OPERATORS
- #define new WXDEBUG_NEW
- #endif
- // Define a new application type
- class MyApp: public wxApp
- { public:
- bool OnInit(void);
- };
- // Define a new frame type
- class MyFrame: public wxFrame
- { public:
- MyFrame(wxFrame *parent);
- void OnQuit(wxCommandEvent& event);
- DECLARE_EVENT_TABLE()
- };
- IMPLEMENT_APP(MyApp)
- // `Main program' equivalent, creating windows and returning main app frame
- bool MyApp::OnInit(void)
- {
- if ( !wxApp::OnInit() )
- return false;
- // Create the main frame window
- MyFrame *frame = new MyFrame((wxFrame *) NULL);
- // Give it an icon
- frame->SetIcon(wxICON(sample));
- // Make a menubar
- wxMenu *file_menu = new wxMenu;
- file_menu->Append(wxID_EXIT, wxT("E&xit"));
- wxMenuBar *menu_bar = new wxMenuBar;
- menu_bar->Append(file_menu, wxT("File"));
- frame->SetMenuBar(menu_bar);
- // Make a panel with a message
- wxPanel *panel = new wxPanel(frame);
- (void)new wxStaticText(panel, wxID_ANY, wxT("Hello, this is a minimal debugging wxWidgets program!"), wxPoint(10, 10));
- // Show the frame
- frame->Show(true);
- #if wxUSE_MEMORY_TRACING
- wxDebugContext::SetCheckpoint();
- #endif
- // object allocation
- wxBrush* brush = new wxBrush(*wxRED_BRUSH);
- wxBitmap* bitmap = new wxBitmap(100, 100);
- // non-object allocation
- char *ordinaryNonObject = new char[1000];
- wxString *thing = new wxString;
- #if wxUSE_DATETIME
- wxDateTime* date = new wxDateTime;
- #endif // wxUSE_DATETIME
- const char *data = (const char*) thing ;
- #if wxUSE_MEMORY_TRACING
- // On MSW, Dump() crashes if using wxLogGui,
- // so use wxLogStderr instead.
- wxLog* oldLog = wxLog::SetActiveTarget(new wxLogStderr);
- wxDebugContext::PrintClasses();
- wxDebugContext::Dump();
- wxDebugContext::PrintStatistics();
- // Set back to wxLogGui
- delete wxLog::SetActiveTarget(oldLog);
- #endif
- // Don't delete these objects, to force wxApp to flag a memory leak.
- // delete thing;
- // delete date;
- // delete[] ordinaryNonObject;
- return true;
- }
- wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
- EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
- wxEND_EVENT_TABLE()
- // My frame constructor
- MyFrame::MyFrame(wxFrame *parent):
- wxFrame(parent, wxID_ANY, wxT("MemCheck wxWidgets Sample"), wxDefaultPosition, wxSize(400, 200))
- {}
- // Intercept menu commands
- void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
- {
- Close(true);
- }
|