crash

From: Patrick Dupre <pd520_at_york.ac.uk>
Date: Wed, 13 Oct 2010 22:45:49 +0100


Hello,

I took the following example on the root web site, but it crashes when I make a test close file.
Why ?

#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <string>
#include <iostream>

#include <TROOT.h>
#include <TApplication.h>
#include <TVirtualX.h>
#include <TGListBox.h>
#include <TGClient.h>
#include <TGFrame.h>
#include <TGMenu.h>

//using namespace std ;

enum values
{M_FILE_OPEN, M_FILE_CLOSE, M_FILE_CANCEL, M_FILE_HELP_COMMAND }; class TestMainFrame : public TGMainFrame {

   private:

      TGPopupMenu *menuTest, *menuHelp, *menuCancel;
      TGMenuBar   *menubar;
   public:
      TestMainFrame(const TGWindow *pp, UInt_t w, UInt_t h);
      ~TestMainFrame();

      Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
};

TestMainFrame:: ~TestMainFrame()
{

   printf("Deleting those objects ...wait a moment, please ...\n");    delete menuTest;
   delete menuHelp;
   delete menuCancel;
   delete menubar;
}

TestMainFrame::TestMainFrame(const TGWindow *pp, UInt_t w, UInt_t h) : TGMainFrame(pp,w,h)
{

    menuTest = new TGPopupMenu(gClient->GetRoot());     menuTest->AddLabel("This is to open the window !!");     menuTest->AddEntry("&Close file ", M_FILE_CLOSE);

    menuCancel = new TGPopupMenu(gClient->GetRoot());     menuCancel->AddLabel("This is to cancel the window !!");     menuCancel->AddEntry("&cancel ",M_FILE_CANCEL);

    menuHelp = new TGPopupMenu(gClient->GetRoot());     menuHelp->AddEntry("&help ", M_FILE_HELP_COMMAND);

    menuHelp->Associate(this);
    menuCancel->Associate(this);
    menuTest->Associate(this);

   TGLayoutHints *barLayout = new TGLayoutHints(kLHintsTop|kLHintsLeft

                                             |kLHintsExpandX,0,0,1,1);
   TGLayoutHints *TestCancel = new
TGLayoutHints(kLHintsTop|kLHintsLeft,0,4,0,0);

   TGLayoutHints *help = new TGLayoutHints(kLHintsTop|kLHintsRight);

   menubar = new TGMenuBar(this, 1,1, kHorizontalFrame);

   menubar->AddPopup("&Test ", menuTest, TestCancel);
   menubar->AddPopup("&Cancel ", menuCancel, TestCancel);
   menubar->AddPopup("&Help ",menuHelp, help);
   AddFrame(menubar, barLayout);
//-----------------------------------------------------------------

    MapSubwindows();
    Resize(GetDefaultSize());
    MapWindow();

}

Bool_t TestMainFrame:: ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
{

   switch(GET_MSG(msg))
   {

     case kC_COMMAND:
       switch(GET_SUBMSG(msg))
       {
         case kCM_MENU:
 	   switch(parm1)
 	   {
 	      case M_FILE_CLOSE:
 		printf("deleteing the windows\n");
 		delete this;
 		break;
 	      default:
 		break;
            }

         default:
 	   break;
        }
      default:
      break;

   }
return kTRUE;
}

using namespace std ;

int main (int argc, char **argv) {

   TApplication theApp ("App", &argc, argv) ;    TestMainFrame mainWindow (gClient -> GetRoot (), 800, 400) ; cout << "Before the App.run\n" ;

   theApp.Run () ;
cout << "After theApp.run\n" ;

   return 0 ;
   }

-- 
---
==========================================================================
  Patrick DUPRÉ                      |   |
  Department of Chemistry            |   |  Phone: (44)-(0)-1904-434384
  The University of York             |   |  Fax:   (44)-(0)-1904-432516
  Heslington                         |   |
  York YO10 5DD  United Kingdom      |   |  email: patrick.dupre_at_york.ac.uk
==========================================================================
Received on Wed Oct 13 2010 - 23:45:55 CEST

This archive was generated by hypermail 2.2.0 : Thu Oct 14 2010 - 11:50:01 CEST