Hi ROOT'ers, First some info: ROOT version: 2.25/01 CINT version: 5.14.44 OS: Redhat Linux 6.1 Architecture: i386 (PIII) There seems to be a bug in "TDataMember::GetMaxIndex(int)", or maybe it's in int "G__DataMemberInfo::MaxIndex(int dim)", because it returns a large negative number for size of the index if, in my class I have have a static const Char_t* array of unknown size. Here's a reall simple example showing whats going on: File foo.hh ----------------------------------------------------------------- #ifndef FOO_H #define FOO_H #include <TObject.h> class Foo : public TObject { public: static const Int_t fBar; static const Char_t* fBaz[]; //[fBar] ClassDef(Foo,1) // Foo object } ; #endif File foo.cc ----------------------------------------------------------------- #include "foo.hh" #include <iostream> ClassImp(Foo); const Int_t Foo::fBar = 3; const Char_t* Foo::fBaz[Foo::fBar] = { "Foo", "Bar", "Baz" }; File fooLinkDef.hh ----------------------------------------------------------------- #ifndef __CINT__ #error "Not for compiling" #endif #pragma link off all classes; #pragma link C++ class Foo; File fooMake.sh ----------------------------------------------------------------- #!/bin/sh rootcint -f fooCint.cc -c foo.hh fooLinkDef.hh g++ `root-config --cflags` -g -fPIC -Wall -c fooCint.cc g++ `root-config --cflags` -g -fPIC -Wall -c foo.cc g++ -shared -Wl,-soname,libFoo.so -o libFoo.so fooCint.o foo.o When I do: prompt% root ******************************************* * * * W E L C O M E to R O O T * * * * Version 2.24/05 16 May 2000 * * * * You are welcome to visit our Web site * * http://root.cern.ch * * * ******************************************* Compiled with thread support. CINT/ROOT C/C++ Interpreter version 5.14.38, May 5 2000 Type ? for help. Commands must be C++ statements. Enclose multiple statements between { }. root [0] gSystem->Load("./libFoo.so") (int)0 root [1] TClass* c = Foo::Class() root [2] TDataMember* m = c->GetDataMember("fBaz") root [3] m->GetMaxIndex(0) (const Int_t)(-2147483648) root [4] To me it looks like over flow of some variable, since looking in /usr/include/limits.h gimme (on a i386) # define INT_MIN (-INT_MAX - 1) # define INT_MAX 2147483647 # define LONG_MAX 2147483647L # define LONG_MIN (-LONG_MAX - 1L) The consequence of this (bug!?) is that THtml will produce a very large file, because of a loop inside THtml::Class2Html, that goes something like for( w = 0; w < ( maxLen2[j]-len2 ); w++ ) classFile << " " where len2 = TMath::Log10(-2147483648) = nan. The file is only closed when it reaches the 2 GB file limit on the EXT2 filesystem. I hope you know what's going on, 'cause I've got the faintest. Yours, Christian ----------------------------------------------------------- Holm Christensen Phone: (+45) 35 35 96 91 Sankt Hansgade 23, 1. th. Office: (+45) 353 25 305 DK-2200 Copenhagen N Web: www.nbi.dk/~cholm Denmark Email: cholm@nbi.dk
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:31 MET