The stack trace tells me what's going on. To confirm my understanding, will
you try following.
1) Edit $ROOTSYS/cint/include/iostream.h at the very end there exists followi
ng template function. Please commend this out and try getenv. I think the pro
blem goes away.
template<class T>
int G__ateval(const T& x) { // << Bus error occurs here
//cout << .....
return(0);
}
2) Re-activate above function and please add following function. Try getenv.
I hope the problem also goes away.
template<class T>
int G__ateval(const T& x) {
//cout << .....
return(0);
}
int G__ateval(const char* x) { return(0); }
int G__ateval(const void* x) { return(0); }
If both 1) and 2) works, keep 2) in your iostream.h. I'll make this
change to the original.
I need to explain what is happening.
CINT evaluates return value of the interactive expression by using G__ateval
function. In this case, "getenv("HOME")" returns 'const char*'. CINT
instantiates template function 'int G__ateval(const char*& x)'. The argument
is a reference to pointer. getenv returns system defined static memory area
which may be dangerous to get reference of.
Adding 'int G__ateval(const void* x)' prevents this action.
Let me know how things go.
And finally, please just call me Masa.
Thank you
Masaharu Goto
-------------------------------------------------------------
Masaharu-san,
just want to add that (at least with KAI-compiled version) the crash
occurs *only* when I invoke root - when I invoke root.exe ROOT doesn't break (
!)Seems to have something to do with the initializations
(may be non-zeroed memory)... anyway, I hope that the output below can shed
some light at the problem.
- pasha.
------------------------------------------------------------------------------
--/cdf/upgrade/tracking/murat/g3/test>root -b
*******************************************
* *
* W E L C O M E to R O O T *
* *
* Version 2.21/03 22 January 1999 *
* *
* You are welcome to visit our Web site *
* http://root.cern.ch *
* *
*******************************************
CINT/ROOT C/C++ Interpreter version 5.13.87, Jan 8 1999
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
root [0]
root [0] getenv("HOME")
(char* 0x7ffee03b)"/home/lv0/murat"
root [1] #include <iostream.h>
root [2] getenv("HOME")
<--------- at this point the code breaks