Re: [ROOT] Seg.Violation on return TGraph

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Mar 12 2003 - 19:57:35 MET


Hi Sven,

What you do is illegal in C++ (and anyhow very inefficient).
When leaving your makegraph function, the object is deleted
when leaving the scope !

You can do as shown below

Rene Brun

#include "TGraph.h"
#include <iostream>

TGraph *makeGraph(void){
  TGraph *rgraph = new TGraph(10);
  rgraph->SetName("test");
  return rgraph;
}

void sven() {
  cout << "Creating main's TGraph" << endl;
  TGraph *tgraph;
  cout << "Getting TGraph from makeGraph." << endl;
  tgraph = makeGraph();
  cout << "Exiting test-code." << endl;

}



On Wed, 12 
Mar 2003, Sven Schagen wrote:

> Dear ROOTers,
> 
> I found a problem with functions returning TGraph objects. Returning a 
> TGraph in a compiled piece of code triggers a segmentation violation. An 
> simple example is attached below.
> 
> My working version of ROOT is 3.04/00. I compiled the code with 
> egcs-2.91.66 on a Redhat 6.2 machine. A minimal example of this problem is 
> given in the code below. 
> 
> Getting an stack trace from the debugger after the crash shows that the
> problem is triggered by the TGraph-destructor.
> 
> After looking at the TGraph source code, I think the problem lies in the
> fact that there is no TGraph copy constructor, to copy the arrays that
> contain the coordinates and the other 'pointer' data. 
> 
> So my question is: could a (safe) TGraph copy-constructor be implemented,
> or is there some (fundamental) reason why there is none implemented yet ?
> 
> 	Cheers,
> 		Sven Schagen
> 
> ---- Example code ----
> 
> #include "TGraph.h"
> #include <iostream>
> 
> TGraph makeGraph(void){
>   TGraph rgraph(10);
>   rgraph.SetName("test");
>   return rgraph;
> }
> 
> void main(int argc,char** argv){
>   cout << "Creating main's TGraph" << endl;
>   TGraph tgraph;
>   cout << "Getting TGraph from makeGraph." << endl;
>   tgraph = makeGraph();
>   cout << "Exiting test-code." << endl;
> 
> }
>  
> 
> 



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:10 MET