RE: [ROOT] TFile and IsOpen()

From: Faine, Valeri (fine@bnl.gov)
Date: Tue Apr 29 2003 - 19:59:26 MEST


> 
> Hi,
> 
> In the following 3 line program, I would expect that IsOpen will
return
> false since the TFile pointer doesn't point to anything. Instead, I
get a
> segmantation fault. This happens with both v3.04-02 and v3.03-09.

That is correct behavior for ANY C++ class. Your pointer points
arbitrary place in the memory (or ZERO) and this way you are getting an
arbitrary result (usually just a crash).
> 
> #include <TFile.h>
> main()
> {
>   TFile* f;
>   f -> IsOpen();
>   return 0;
> }
> 
> 
> I don't think I should get a segmentation violation here.

  You must get it there.

> There are a few
> cases where f -> IsOpen() returning false would be very useful. I was
> wondering if this behavior could be implemented.

 No it is not possible in C++.

 What you probably need is:


 #include <TFile.h>
 main()
 {
   TFile* f = 0;
   if (f)  return  f -> IsOpen();
   return 0;
 }

 That will not crash.

 Hope this helps, Valeri 


 Chhers,
 	-Kalen
 
> -----------------------------------------------------------------
> - Kalen Martens			 	     Ph:(416)-978-6632
-
> - Dept. of Physics						-
> - University of Toronto, Toronto, Canada			-
> -----------------------------------------------------------------



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