It seems like many people are falling into the same problem.
I'd like to post this message to roottalk for prevention of this kind
of problem.
The problem only occurs in ROOT and not in bare CINT. This is due to
ROOT specific reset scheme for iostream.h. Solution to this is
*** <iostream.h> MUST BE LOADED IN rootlogin.C ***
{
printf("\nWelcome to ROOT tutorials\n\n");
G__loadfile("iostream.h");
}
This will prevent many of the problems you may face with iostream.
Thank you
Masaharu Goto
====================================================================
Full_Name: Walter F.J. Mueller
Version: 2.00/12 - 2.21/08
Hardware:
OS: Linux and AIX
Severity: major
Reproducable: always
Submission from: rzserv1.gsi.de (140.181.96.11)
There seems to be a problem with the way cout and possibly other standart
streams are handled. The symptoms are:
root gets a "segmentation violation" when a macro using <iostream.h>
writes to cout after it has been loaded a second time.
Example:
//---------- error_001.C ----------
#include <iostream.h>
int main()
{
printf("Hello Brian\n");
cout << "Hello Bjarne" << endl;
return;
}
//---------- ----------- ----------
and you'll get
.L error_001.C
main();
main();
.L error_001.C
main();
The last call to main() will produce
Hello Brian
*** Break *** segmentation violation
so the printf is done but the using cout get it over the edge. Terminating
with ^C and .q has in similar cases given the message
Fatal in <operator delete>: storage area overwritten
aborting
Note, that loading twice without execution is no problem:
.L error_001.C
.L error_001.C
main(); // fine
.L error_001.C
main(); // crash
This behaviour was seen on our Linux systems as well as on AIX:
root OS
2.21/08 Debian 2.1 (libc.so.6)
2.00/13 Debian 2.1 (libc.so.6)
2.00/13 Debian 1.3.1 (libc.so.5)
2.00/12 AIX 4.1.5.0
Remarkable is, that the same sequence of commands works fine with cint !!
With best regards, Walter