Hi Ben, This is a programming error. In this case CINT wants to be nice. With the compiler, nothing to do, except protecting your code. Rene Brun On Thu, 24 May 2001, Ben Kilminster wrote: > > I had a problem with arrays in a large program and have simplified it down > into an example that has almost the same features of my original problem: > writing to an array index out of bounds. > > The basic point is that a segmentation violation is protected against by > the interpreter, and ignored by the compiler. > > > When I run the following macro using the interpreter, I get : > > root [0] .L check_array.C > root [1] check_array() > Error: Array index out of range ary -> [3] valid upto ary[2] > FILE:check_array.C LINE:10 > Error: Array index out of range ary -> [4] valid upto ary[2] > FILE:check_array.C LINE:10 > Error: Array index out of range ary -> [4] valid upto ary[2] > FILE:check_array.C LINE:10 > (int)0 > *** Interpreter error recovered *** > > > However, when I use the compiler I get : > > root [0] .L check_array.C++ > Creating shared library /misc/data06a/ben/3.11.1/./check_array_C.so > root [1] check_array() > val is -1073785306 > > > In case it is relevant, this was in root 3.01/01. > > Can any protection be in place against something like this ? > > Cheers, > Ben > > > //--------------------------------------------------- > // Here is the example macro: check_array.C > //--------------------------------------------------- > > #include <iostream.h> > > void check_array () > { > int ary[3]; > int val; > > // note : that I am accessing illegal memory > for (int i=0; i < 5; i++) > { > ary[i] = i; > val += ary[i]; > } > > cout << " val is " << val << endl; > } > >
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:46 MET