bug-gsl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-gsl] array, vector indices out-of-bounds in "linalg/bidiag.c"


From: Julian Seward
Subject: Re: [Bug-gsl] array, vector indices out-of-bounds in "linalg/bidiag.c"
Date: Sun, 20 Apr 2008 09:58:47 +0200
User-agent: KMail/1.9.5

>       for (j = N; j > 0 && j--;)

This is an extremely strange for-loop header, and I wonder if
it is what the author(s) really intended.  I _think_ it might
be equivalent to

   for (j = N; j > 0 && j != 0; /*no step action*/) {
      j--;
      /* now the rest of the loop body */
   }
   j--; /* because the condition is consulted 1 more time than the 
           loop body runs */

so there isn't necessarily an overrun at j = N.

I wonder if it would not be cleaner to use a standard idiom:

   for (j = N-1; j >= 0; j--)

IMO even a C language lawyer would have a hard time figuring out
what the exact behaviour is here, which doesn't bode well for
end-user understanding of the code.

You might want to try Valgrind's Memcheck tool to see if there
are in fact any overruns happening.

J




reply via email to

[Prev in Thread] Current Thread [Next in Thread]