[ROOT] ROOT version 3.03.06 crash, using TGTextButton and TGHButtonGroup

From: Gora Mohanty (gora@solar2.ucr.edu)
Date: Thu Jul 11 2002 - 09:58:45 MEST


Hi,
  When I try to use TGTextButton with TGHButtonGroup in compiled code
with ROOT version 3.03.06, and gcc 3.0.1 (ROOT was also compiled with
the same compiler), I get a segmentation violation error. The crash
seems to happen when the TGTextButton is added to the TGHButtonGroup,
though I have not completely followed this through. The very same code
works with ROOT version 3.01.06.
  Attached is a small example that reproduces the problem, with three
files: crash.h, crash.cxx, and Makefile. Compile by typing "make,"
assuming gmake and that g++ is version 3.0.1.
  Thanks in advance for finding the problem. I am on a x86 Linux box.

Regards,
Gora



#include <Rtypes.h>
#include <TROOT.h>
#include <TApplication.h>
#include <TGButton.h>
#include <TGButtonGroup.h>
#include <TGClient.h>
#include <TGFrame.h>
#include <TGLayout.h>

extern void InitGui();  
VoidFuncPtr_t initfuncs[] = { InitGui, 0 };

TROOT root( "Rapp", "The ROOT Application Interface", initfuncs );

class MyMainFrame : public TGMainFrame {
private:
  TGHButtonGroup    *fbtn_grp;
  TGTextButton      *fbtn;
  TGLayoutHints     *fbtn_lyt, *fbtn_grp_lyt;
public:
  MyMainFrame(const TGWindow*);
  virtual ~MyMainFrame();
};


#include <cstdlib>
#include "crash.h"

MyMainFrame::MyMainFrame(const TGWindow* main) :
  TGMainFrame( main, 800, 400 )
{
  fbtn_grp = new TGHButtonGroup( this, "Button group" );
  fbtn = new TGTextButton( fbtn_grp, "Button" );
  fbtn->Associate( this );
  fbtn_lyt = new TGLayoutHints( kLHintsLeft | kLHintsBottom, 2, 2, 0, 0 );
  fbtn_grp->SetLayoutHints( fbtn_lyt );
  fbtn_grp->Show();
  fbtn_grp_lyt = new TGLayoutHints( kLHintsCenterX | kLHintsTop, 0, 0, 0, 0 );
  AddFrame( fbtn_grp, fbtn_grp_lyt );

  SetWindowName( "ROOT application" );
  MapSubwindows();
  Layout();
  // We need to use GetDefaultSize() to initialize the layout algorithm
  Resize( GetDefaultSize() );
  MapWindow();
}
MyMainFrame::~MyMainFrame()
{
  delete fbtn_lyt;
  delete fbtn;
  delete fbtn_grp_lyt;
  delete fbtn_grp;
}
int main(int argc, char *argv[])
{
 TApplication app( "ROOT application", &argc, argv );
 MyMainFrame main = new MyMainFrame( gClient->GetRoot() );
 app.Run();
 exit( EXIT_SUCCESS );
}


CXX          = g++
CXXOPTS      = -O2
CXXFLAGS     = -ansi -pedantic -Wall -W -Wwrite-strings -Wmissing-prototypes -Woverloaded-virtual -Wsign-promo -Wno-long-long -Wno-unused
CXXINCS      = 
SOFLAGS      = -shared
CXXLIBS      = -lm -ldl -rdynamic
SYSXLIBS     = -L/usr/X11R6/lib -lXpm -lX11

CINTSYSDIR   = $(ROOTSYS)/cint
ROOTLIBS    := $(shell root-config --libs)
ROOTGLIBS   := $(shell root-config --glibs)
ROOTINCS     = -I$(ROOTSYS)/include
	     
CINTINCS     = $(CXXINCS) $(ROOTINCS)
	     
INCLUDES     = $(CXXINCS) $(ROOTINCS)
LIBS         = $(CXXLIBS) $(ROOTLIBS)
GLIBS        = $(ROOTGLIBS) $(SYSXLIBS)

all: crash.cxx crash.h
	@echo -e \\nGenerating object file
	$(CXX) $(CXXOPTS) $(CXXFLAGS) $(INCLUDES) -o crash crash.cxx $(LIBS) $(GLIBS)



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:59 MET