Hi Jean-Pierre,
This problem is an easy one.
When you execute
Run a;
The Run constructor will execute correctly. However when
finishing the execution of the constructor, all objects created
on the stack inside are automatically deleted (normal C++ scoping
rules). Your file is deleted and also the associated Tree.
When you call later
a.NEH();
the pointer fh points to a deleted object.
The solution is to replace
TFile f("essai.root");
by
TFile *f = new TFile("essai.root")
Rene Brun
On Mon, 8 Apr 2002, Jean-Pierre Ernenwein wrote:
> Hello all
>
>
> I have a very simple class with a TFile and a TTree, I would like to
> use it to fill an histogram, but when I try to access this histogramm, I
> have
> segmentation violation (call to NEH() method) :
>
> class Run : public TNamed
> {
> private:
> TH1F *fh;
> public:
> Run()
> {
> TFile f("essai.root");
> TTree* t=(TTree*)f.Get("essait");
> Float_t x;
> t->SetBranchAddress("X",&x);
> fh=new TH1F("essai","essai",100,0.,1.);
> for (Int_t i=0; i<t->GetEntries();i++)
> {
> t->GetEntry(i); fh->Fill(x);
> }
> cout << fh->GetEntries() << endl;
> };
> virtual ~Run();
> Stat_t NEH(){return fh->GetEntries();};
>
> ClassDef(Run,1)
> };
>
>
> in root I have :
>
> root [0] gSystem->Load("libess.so");
> root [1] Run a;
> 100
> root [2] a.NEH();
> <TCanvas::MakeDefCanvas>: created default TCanvas with name c1
> Error: Symbol nan is not defined in current scope FILE: LINE:0
> *** Interpreter error recovered ***
>
> *** Break *** segmentation violation
>
>
> (I don't ask for a plot)
> the problem is similar in all last root versions
>
> has someone an answer
>
> BR
>
>
>
> Jean-Pierre Ernenwein, GRPHE
> Universite de Haute Alsace, IUT Mulhouse, dept SGM / IReS Strasbourg
> Tel: 03 89 33 75 56 (IUT) / 03 88 10 66 19 ou 66 77 (IReS)
> Portable : 06 89 26 40 46
>
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:48 MET