Re: [ROOT] segmentation fault ignored by compiler

From: Rene Brun (Rene.Brun@cern.ch)
Date: Fri May 25 2001 - 12:10:30 MEST


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