Re: add/assign problem, part 2.

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

 



Hi David,

I think you've got a coding error, not a compiler error. Make sure you're not using any optimizations (i.e. no -01,2 or 3 switches) as these switches can often "magnify" errors such as the one you're getting. Obviously it's not a solution to just leave optimization off, but it might help you track down where the problem is.

I haven't actually compiled up your program, but immediately alarm bells are ringing when I see things like

a = *(vec + i)

Are you 100% sure this isn't going to wander into unallocated memory? Why not use std::vector instead of arrays? If you did then you could call vector.size() and be safe. I think you're getting an overrun somewhere because of your use of arrays - just check each block of code for that. What is "a" set to just before ret gets set to zero?

Never put "using namespace std" in header files - it's very bad practice. I can't find any use of "const" in your code - this prevents many of the kind of errors you're seeing - apply it to all variables and functions as appropriate.

You're not using Numerical Recipies for ideas are you? Although this book is a classic it is full of horrid programming. Take a look at the C++ book recommendations on www.accu.org for ideas for good books (unfortunately in the field of numerical computing, there isn't much to rival Press et. al).

HTH,
David.

At 17:25 31/12/2006, you wrote:

Upon receiving some advice, I have attached here the entire piece of code I'm
trying to run.  It's a Newton solver; LSMbdnew is the generic solver, and
bulkfunc contains the function (f) and Jacobian (jac). The whole thing may look
a little ugly to the experienced programmers on this list -- sorry.

Anyway, this will compile and run, but it won't do what it's supposed to.  I
found out with gdb that the reason for this is that the function
LSMbdnew::norm(double *vec1, long num) is not executing the add/assign properly. For some reason, it sets the collecting variable _ret_ to zero after one or two
iterations.  Why?  I am stumped.

Thanks,
-David








[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux