Florian Schopper wrote: > > Dear Rooters, > > we encountered a probably simple problem, which we couldn't find in > the roottalk list, though. > > When we allocate Histogramms with new in the constructor of MChip, > and store the MChip class into a root-file, > we get a segmentation violation error when accessing the restored > histogramms. > > Is it necessary to write a default constructor for MChip which allocates > the histogramms again? > > thanks, > Florian > > class MChip : public TObject > { > private: > > TH1F *CommonModeHist; > TH1F *NHitHist; > > public: > MChip(){} > > MChip(Int_t nChannel, TString Appelation ); > > ClassDef(MChip,1) > } ; > > The Constructor looks something like that: > > MChip::MChip(Int_t N, TString Appelation) > { > CommonModeHist = new TH1F("CommonMode","CommonMode",50,-25.0,25.0); > CommonModeHist->SetDirectory(0); > NHitHist = new TH1F("NHits","Number of Hits",10,0,10); > HitHist->SetDirectory(0); > > } Hi Florian, All your classes must have a default constructor. This default constructor is used by Root I/O in particular to create an instance of a class before invoking its Streamer method when you read an object from a file. The default constructor should not internally allocate objects or dynamic arrays. If you do so, you must be cautious in the corresponding destructor. Below, you will find a slightly modified example with the script to create a shared lib. Rene Brun //----------script rootcint -f cint.C -c MChip.h MChipLinkDef.h g++ -fno-rtti -fno-exceptions -fPIC -I$ROOTSYS/include -c cint.C MChip.C g++ -g -Wl,-soname,MChip.so -shared cint.o MChip.o -o MChip.so //----------file MChip.h #include <TNamed.h> #include <TH1.h> class MChip : public TObject { private: TH1F *CommonModeHist; TH1F *NHitHist; public: MChip(){} MChip(Int_t nChannel, TString Appelation ); ClassDef(MChip,1) } ; //-----------file MChipLinkDef.h #ifdef __CINT__ #pragma link off all globals; #pragma link off all classes; #pragma link off all functions; #pragma link C++ class MChip; #endif //---------file MChip.C #include "MChip.h" ClassImp(MChip) MChip::MChip(Int_t N, TString Appelation) { CommonModeHist = new TH1F("CommonMode","CommonMode",50,-25.0,25.0); CommonModeHist->SetDirectory(0); NHitHist = new TH1F("NHits","Number of Hits",10,0,10); NHitHist->SetDirectory(0); }
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:28 MET