Error message does not make any sense

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Error message does not make any sense

Andreas Weingessel
To: [hidden email]
Subject: Error message

Bug report for Octave 1.91 configured for i586-unknown-linux

Description:
-----------

When using a vector or matrix index which is NaN, octave gives an
error message like

error: invalid vector index = -2147483648
error: evaluating index expression near line 11, column 1

So, if for example the following lines are part of an m-File

[dis pos]=min(a);
c=b(pos);

and the vector grows for some reason out of bounds, the program
terminates with the above error message which does not give any clue
what has been the real reason for the error.

Repeat-By:
---------

octave:7> a=rand(1,5)
a =

  0.20286  0.69216  0.29748  0.33870  0.10974

octave:8> b=rand(1,5)
b =

  0.40447  0.48739  0.92516  0.45729  0.87664

octave:9> a(1)=NaN
a =

      NaN  0.69216  0.29748  0.33870  0.10974

octave:10> [dis pos]=min(a)
dis = NaN

pos = NaN

octave:11> b(pos)
error: invalid vector index = -2147483648
error: evaluating index expression near line 11, column 1



Configuration (please do not edit this section):
-----------------------------------------------

uname output:     Linux elendil 2.0.13 #1 Wed Aug 28 14:31:14 MET DST 1996 i586
configure opts:   --datadir=/usr/local/lib --libexecdir=/usr/local/lib --enable-shared
Fortran compiler: g77
FFLAGS:           -O
F2C:              
F2CFLAGS:        
FLIBS:            -lf2c -L/usr/lib/gcc-lib/i486-linux/2.7.2 -lgcc
CPPFLAGS:        
INCFLAGS:         -I/usr/local/include -I/usr/local/include/octave-1.91
C compiler:       gcc, version 2.7.2
CFLAGS:           -DHAVE_CONFIG_H -mieee-fp -O
CPICFLAG:         -fPIC
C++ compiler:     c++, version 2.7.2
CXXFLAGS:         -DHAVE_CONFIG_H  -fno-implicit-templates -mieee-fp -O
CXXPICFLAG:       -fPIC
LDFLAGS:          -s
LIBFLAGS:         -L/usr/local/lib
RLD_FLAG:        
CXXLIBS:          -lstdc++ -lm -L/usr/lib/gcc-lib/i486-linux/2.7.2 -lstdc++ -lm -lgcc -lc -lgcc
TERMLIBS:         -lncurses
LIBS:            
LEXLIB:          
LIBPLPLOT:        
LIBDLFCN:        
DEFS:

  -DOCTAVE_SOURCE=1 -DSEPCHAR=':' -DSEPCHAR_STR=":" -DUSE_GNU_INFO=1
  -DUSE_READLINE=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=4
  -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 -DF77_APPEND_UNDERSCORE=1
  -DSTDC_HEADERS=1 -DHAVE_DIRENT_H=1 -DTIME_WITH_SYS_TIME=1
  -DHAVE_SYS_WAIT_H=1 -DHAVE_ASSERT_H=1 -DHAVE_CURSES_H=1
  -DHAVE_FCNTL_H=1 -DHAVE_FLOAT_H=1 -DHAVE_GRP_H=1 -DHAVE_LIMITS_H=1
  -DHAVE_MEMORY_H=1 -DHAVE_PWD_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1
  -DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_STAT_H=1
  -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_TIMES_H=1 -DHAVE_SYS_TYPES_H=1
  -DHAVE_SYS_UTSNAME_H=1 -DHAVE_TERMCAP_H=1 -DHAVE_TERMIO_H=1
  -DHAVE_TERMIOS_H=1 -DHAVE_UNISTD_H=1 -DHAVE_VARARGS_H=1 -DNPSOL_MISSING=1
  -DQPSOL_MISSING=1 -DFSQP_MISSING=1 -DHAVE_ATEXIT=1 -DHAVE_BCOPY=1
  -DHAVE_BZERO=1 -DHAVE_DUP2=1 -DHAVE_ENDGRENT=1 -DHAVE_ENDPWENT=1
  -DHAVE_EXECVP=1 -DHAVE_FCNTL=1 -DHAVE_FORK=1 -DHAVE_GETCWD=1
  -DHAVE_GETEGID=1 -DHAVE_GETEUID=1 -DHAVE_GETGID=1 -DHAVE_GETGRENT=1
  -DHAVE_GETGRGID=1 -DHAVE_GETGRNAM=1 -DHAVE_GETHOSTNAME=1 -DHAVE_GETPGRP=1
  -DHAVE_GETPID=1 -DHAVE_GETPPID=1 -DHAVE_GETPWENT=1 -DHAVE_GETPWNAM=1
  -DHAVE_GETPWUID=1 -DHAVE_GETUID=1 -DHAVE_LSTAT=1 -DHAVE_MEMMOVE=1
  -DHAVE_MKDIR=1 -DHAVE_MKFIFO=1 -DHAVE_ON_EXIT=1 -DHAVE_PIPE=1
  -DHAVE_PUTENV=1 -DHAVE_RENAME=1 -DHAVE_RINDEX=1 -DHAVE_RMDIR=1
  -DHAVE_SETGRENT=1 -DHAVE_SETPWENT=1 -DHAVE_SETVBUF=1 -DHAVE_SIGACTION=1
  -DHAVE_SIGPENDING=1 -DHAVE_SIGPROCMASK=1 -DHAVE_SIGSUSPEND=1 -DHAVE_STAT=1
  -DHAVE_STRCASECMP=1 -DHAVE_STRDUP=1 -DHAVE_STRERROR=1 -DHAVE_STRNCASECMP=1
  -DHAVE_TEMPNAM=1 -DHAVE_UMASK=1 -DHAVE_UNLINK=1 -DHAVE_VFPRINTF=1
  -DHAVE_VSPRINTF=1 -DHAVE_WAITPID=1 -DHAVE_LIBDL=1 -DHAVE_DLOPEN=1
  -DHAVE_DLSYM=1 -DHAVE_DLERROR=1 -DHAVE_DLCLOSE=1 -DWITH_DL=1
  -DWITH_DYNAMIC_LINKING=1 -DHAVE_LIBM=1 -DHAVE_FINITE=1 -DHAVE_ISNAN=1
  -DHAVE_ISINF=1 -DHAVE_ACOSH=1 -DHAVE_ASINH=1 -DHAVE_ATANH=1 -DHAVE_ERF=1
  -DHAVE_ERFC=1 -DHAVE_ST_BLKSIZE=1 -DHAVE_ST_BLOCKS=1 -DHAVE_ST_RDEV=1
  -DHAVE_TZNAME=1 -DRETSIGTYPE=void -DSYS_SIGLIST_DECLARED=1
  -DHAVE_SYS_SIGLIST=1 -DHAVE_POSIX_SIGNALS=1 -DHAVE_GETRUSAGE=1
  -DHAVE_TIMES=1 -DGNUPLOT_HAS_MULTIPLOT=1 -DGNUPLOT_HAS_FRAMES=1

User-preferences (please do not edit this section):
--------------------------------------------------

  EDITOR = "vi"
  IMAGEPATH = ".:/usr/local/lib/octave/1.91/imagelib//"
  INFO_FILE = "/usr/local/info/octave.info"
  LOADPATH = ".:~/lib/octave/m//:~/Work/octave/m//.:/usr/local/lib/octave/site/oct/i586-unknown-linux//:/usr/local/lib/octave/site/m//:/usr/local/lib/octave/1.91/oct/i586-unknown-linux//:/usr/local/lib/octave/1.91/m//"
  OCTAVE_VERSION = "1.91"
  PAGER = "less"
  PS1 = "\\s:\\#> "
  PS2 = "> "
  automatic_replot = 0
  whitespace_in_literal_matrix = 0
  default_save_format = "mat-binary"
  do_fortran_indexing = 1
  empty_list_elements_ok = 1
  eps = 2.22045e-16
  gnuplot_binary = "gnuplot"
  ignore_function_time_stamp = "system"
  implicit_str_to_num_ok = 1
  ok_to_lose_imaginary_part = 1
  output_max_field_width = 10
  output_precision = 5
  page_screen_output = 1
  prefer_column_vectors = 0
  prefer_zero_one_indexing = 1
  print_answer_id_name = 1
  print_empty_dimensions = 0
  propagate_empty_matrices = 1
  resize_on_range_error = 1
  return_last_computed_value = 0
  save_precision = 4
  silent_functions = 0
  split_long_rows = 1
  treat_neg_dim_as_zero = 1
  warn_assign_as_truth_value = 1
  warn_comma_in_global_decl = 1
  warn_divide_by_zero = 1

Reply | Threaded
Open this post in threaded view
|

Error message does not make any sense

John W. Eaton-6
On 12-Nov-1996, Andreas Weingessel <[hidden email]> wrote:

: To: [hidden email]
: Subject: Error message
:
: Bug report for Octave 1.91 configured for i586-unknown-linux
:
: Description:
: -----------
:
: When using a vector or matrix index which is NaN, octave gives an
: error message like
:
: error: invalid vector index = -2147483648
: error: evaluating index expression near line 11, column 1
:
: So, if for example the following lines are part of an m-File
:
: [dis pos]=min(a);
: c=b(pos);
:
: and the vector grows for some reason out of bounds, the program
: terminates with the above error message which does not give any clue
: what has been the real reason for the error.

Please try the following patch.

I don't know if this will be any better at pointing to the real cause
of the error, but at least it will tell you if you have tried to index
something with NaN or Inf values.

jwe


Index: idx-vector.cc
===================================================================
RCS file: /home/jwe/src/master/octave/liboctave/idx-vector.cc,v
retrieving revision 1.34
diff -c -r1.34 idx-vector.cc
*** idx-vector.cc 1996/10/12 18:31:34 1.34
--- idx-vector.cc 1996/11/12 17:10:55
***************
*** 38,43 ****
--- 38,44 ----
 
  #include "idx-vector.h"
  #include "lo-error.h"
+ #include "lo-mappers.h"
 
  #define IDX_VEC_REP idx_vector::idx_vector_rep
 
***************
*** 73,82 ****
  static inline int
  tree_to_mat_idx (double x)
  {
!   if (x > 0)
!     return ((int) (x + 0.5) - 1);
!   else
!     return ((int) (x - 0.5) - 1);
  }
 
  IDX_VEC_REP::idx_vector_rep (const ColumnVector& v)
--- 74,99 ----
  static inline int
  tree_to_mat_idx (double x)
  {
!   return (x > 0) ? ((int) (x + 0.5) - 1) : ((int) (x - 0.5) - 1);
! }
!
! static inline bool
! idx_is_inf_or_nan (double x)
! {
!   bool retval = false;
!
!   if (xisnan (x))
!     {
!       (*current_liboctave_error_handler) ("NaN invalid as index");
!       retval = true;
!     }
!   else if (xisinf (x))
!     {
!       (*current_liboctave_error_handler) ("Inf invalid as index");
!       retval = true;
!     }
!
!   return retval;
  }
 
  IDX_VEC_REP::idx_vector_rep (const ColumnVector& v)
***************
*** 106,113 ****
    else
      {
        data = new int [len];
        for (int i = 0; i < len; i++)
! data[i] = tree_to_mat_idx (v.elem (i));
      }
 
    init_state ();
--- 123,138 ----
    else
      {
        data = new int [len];
+
        for (int i = 0; i < len; i++)
! {
!  double d = v.elem (i);
!
!  if (idx_is_inf_or_nan (d))
!    return;
!  else
!    data[i] = tree_to_mat_idx (d);
! }
      }
 
    init_state ();
***************
*** 141,149 ****
      {
        int k = 0;
        data = new int [len];
        for (int j = 0; j < orig_nc; j++)
  for (int i = 0; i < orig_nr; i++)
!  data[k++] = tree_to_mat_idx (m.elem (i, j));
      }
 
    init_state ();
--- 166,182 ----
      {
        int k = 0;
        data = new int [len];
+
        for (int j = 0; j < orig_nc; j++)
  for (int i = 0; i < orig_nr; i++)
!  {
!    double d = m.elem (i, j);
!
!    if (idx_is_inf_or_nan (d))
!      return;
!    else
!      data[k++] = tree_to_mat_idx (d);
!  }
      }
 
    init_state ();
***************
*** 163,173 ****
    orig_nr = 1;
    orig_nc = 1;
 
!   data = new int [len];
!
!   data[0] = tree_to_mat_idx (d);
 
!   init_state ();
  }
 
  IDX_VEC_REP::idx_vector_rep (const Range& r)
--- 196,209 ----
    orig_nr = 1;
    orig_nc = 1;
 
!   if (idx_is_inf_or_nan (d))
!     return;
!   else
!     {
!       data = new int [len];
 
!       data[0] = tree_to_mat_idx (d);
!     }
  }
 
  IDX_VEC_REP::idx_vector_rep (const Range& r)
***************
*** 208,214 ****
    for (int i = 0; i < len; i++)
      {
        double val = b + i * step;
!       data[i] = tree_to_mat_idx (val);
      }
 
    init_state ();
--- 244,254 ----
    for (int i = 0; i < len; i++)
      {
        double val = b + i * step;
!
!       if (idx_is_inf_or_nan (val))
! return;
!       else
! data[i] = tree_to_mat_idx (val);
      }
 
    init_state ();