Hello, I have noticed that when you create a TGraph object, the TGraph will copy the array you gave it, so it is ok to delete the array after you create the TGraph. When you make a TMultiGraph and start adding graphs to it, it is not ok to then delete the graphs. Apparently TMultiGraph::Add(TGraph *) just saves away the pointer without copying it. I was wondering if there is a general rule for when an object will make its own copy of something and when it will just use the copy you reference. John ************************************************************ Here's the code in case you're curious: { int size = 1000000; double *x = new double[size]; double *y = new double[size]; x[0]=0; y[0]=0; int i=0; for(i=0;i<size-1;i++){ x[i+1]=1.4-x[i]*x[i]+0.3*y[i]; y[i+1]=x[i]; } TGraph *gr1 = new TGraph(size,x,y); TGraph *gr2 = new TGraph(size,y,x); delete x; delete y; //OK. No segmentation violation if you use the graphs. TMultiGraph *mg = new TMultiGraph(); mg->Add(gr1); mg->Add(gr2); /* delete gr1; delete gr2; */ //Doesn't work if these two lines are uncommented mg->Draw("AP"); } --
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:11 MET