Hi Ben,
See the lines added to your code
Rene Brun
On Mon, 11 Mar 2002, Ben Morgan wrote:
> Hi ROOTers,
> I have a raw data class for my experiment, and have used
> MakeClass to generate the skeleton code to read the data from the tree.
> I'm now trying to add a method to the MakeClass skeleton (which I assume
> is o.k. to do) to graph some of the data from each event. The problem is
> that the number of graphs for each event is different (the data is voltage
> traces from a wire chamber). Also, as there may be as many as thirty
> traces to graph per event, and I want to look at many events, I need to
> make sure any preceeding graphs are deleted every time this method is
> called. In my code (included below), I set an array of pointers to TGraph
> objects, name the graphs and add these to the
> current directory (following the example in
> http://root.cern.ch/root/roottalk/roottalk01/0759.html). Without any
> delete statements, the code runs fine and generates the required number of
> TGraphs (using gObjectTable->Print()), and gDirectory->Get("name of
> Graph") returns a non null pointer (although there is of course a memory
> leak).
> However, when I try to delete these graphs by using
> gDirectory->Delete("name of Graph"), the graphs are deleted (looking at
> gObjectTable), but after executing the method several times, it falls over
> with a segmentation violation:
>
> *** Break *** segmentation violation
> Root > Function GraphEvent() busy flag cleared
>
> I've also tried getting the graph pointers, casting them to a TGraph and
> then deleting, but this produces the same seg violation. I'm using ROOT
> v3.01/06 on a PC running RH6.2, any advice on what's causing the problem
> would be very gratefully received! Thanks,
>
> Ben Morgan.
>
> void RawDataClass::GraphEvent(Int_t entry)
> {
> b_fNwire->GetEntry(entry);
> b_fNchan->GetEntry(entry);
> b_fWaveform->GetEntry(entry);
>
> if(fNwire>8)
> {
> cout<<"Event has more than eight active wires, try again"<<endl;
> return;
> }
> char name[20];
> char title[100];
> const Int_t a = fNwire;
>
> for(Int_t i=0; i<8; i++)
> {
> sprintf(name,"Wire%d",i);
> // gDirectory->Delete(name); //line deleted
TGraph *gr = (TGraph*)gDirectory->GetList()->FindObject("name);
//<====new line
delete gr; //<==========new line
> }
>
> cout<<"Number of Active Wires = "<<fNwire<<endl;
>
> TGraph *G[a];
>
> for(Int_t i=0; i<fNwire; i++)
> {
> sprintf(name,"Wire%d",i);
> G[i] = new TGraph(fNchan);
> G[i]->SetName(name);
> gDirectory->GetList()->Add(G[i]);
> }
>
> }
>
>
> --
> -------------------------------------------------------------------------------
> Mr. Ben Morgan
> Postgraduate Student
> University of Sheffield
> Department of Physics & Astronomy
> Hicks Building
> Hounsfield Road
> Sheffield S3 7RH
> -------------------------------------------------------------------------------
>
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:46 MET