The LAPACK forum has moved to https://github.com/Reference-LAPACK/lapack/discussions.

buffer overflow within lapack routine? Please - need help...

Open discussion regarding features, bugs, issues, vendors, etc.

buffer overflow within lapack routine? Please - need help...

Postby Mat » Sun Oct 08, 2006 2:13 pm

Hello,
i am really disappointed of me. I'm working about 8 days now and spent over 50 hours of debug time but i cannot find the error. My program computes some matrix. I post my whole class here and would be very very very thankful if anybode could tell me where my problem is...
the very strange thing is that the lapack routine dormqr_ changes the value of my vector p_col (see below) without any reason... p_col has nothing to do with dormqr_ !
If you compile you will see the different values before and after the call of dormqr...

I really tried everything! I even implemented my whole class without references but only with local copies and each time i created new vectors but every time some other vector changes his value...

I don't know what to do any further...this is the first time in my life i don't know how to go on....debugging doesn't helped me...nothing.

Thanks a lot for ANY help.


[code]
Spai::Spai() : epsilon(0.0000000001)
{

// std::vector< double > A;
// A.push_back(1.0);
// A.push_back(0.0);
// A.push_back(-2.0);
// A.push_back(0.0);
// A.push_back(0.0);
//
// A.push_back(0.0);
// A.push_back(3.0);
// A.push_back(0.0);
// A.push_back(0.0);
// A.push_back(-1.0);
//
// A.push_back(0.0);
// A.push_back(0.0);
// A.push_back(1.0);
// A.push_back(3.0);
// A.push_back(0.0);
//
// A.push_back(2.0);
// A.push_back(0.0);
// A.push_back(0.0);
// A.push_back(1.0);
// A.push_back(0.0);
//
// A.push_back(1.0);
// A.push_back(0.0);
// A.push_back(1.0);
// A.push_back(0.0);
// A.push_back(5.0);
//
//
// std::vector< double > P;
// P.push_back(1.0);
// P.push_back(0.0);
// P.push_back(1.0);
// P.push_back(0.0);
// P.push_back(0.0);
//
// P.push_back(0.0);
// P.push_back(1.0);
// P.push_back(0.0);
// P.push_back(0.0);
// P.push_back(1.0);
//
// P.push_back(0.0);
// P.push_back(0.0);
// P.push_back(1.0);
// P.push_back(1.0);
// P.push_back(0.0);
//
// P.push_back(1.0);
// P.push_back(0.0);
// P.push_back(0.0);
// P.push_back(1.0);
// P.push_back(0.0);
//
// P.push_back(1.0);
// P.push_back(0.0);
// P.push_back(1.0);
// P.push_back(0.0);
// P.push_back(1.0);
//

// std::vector< double > A;
// A.push_back(2.0);
// A.push_back(0.0);
// A.push_back(0.0);
// A.push_back(6.0);
//
// A.push_back(1.0);
// A.push_back(3.0);
// A.push_back(0.0);
// A.push_back(0.0);
//
// A.push_back(0.0);
// A.push_back(0.0);
// A.push_back(4.0);
// A.push_back(0.0);
//
// A.push_back(0.0);
// A.push_back(3.0);
// A.push_back(0.0);
// A.push_back(1.0);
//
//
// std::vector< double > P;
// P.push_back(1.0);
// P.push_back(0.0);
// P.push_back(0.0);
// P.push_back(1.0);
//
// P.push_back(1.0);
// P.push_back(1.0);
// P.push_back(0.0);
// P.push_back(0.0);
//
// P.push_back(0.0);
// P.push_back(0.0);
// P.push_back(1.0);
// P.push_back(0.0);
//
// P.push_back(0.0);
// P.push_back(1.0);
// P.push_back(0.0);
// P.push_back(1.0);

/*
std::vector< double > A;
A.push_back(3.0);
A.push_back(0.0);
A.push_back(0.0);

A.push_back(0.0);
A.push_back(0.0);
A.push_back(-2.0);

A.push_back(0.0);
A.push_back(4.0);
A.push_back(-6.5);


std::vector< double > P;
P.push_back(1.0);
P.push_back(0.0);
P.push_back(0.0);

P.push_back(0.0);
P.push_back(0.0);
P.push_back(1.0);

P.push_back(0.0);
P.push_back(1.0);
P.push_back(1.0);

*/
std::vector< double > A;
A.push_back(0.0);
A.push_back(0.0);
A.push_back(1.0);
A.push_back(0.0);
A.push_back(0.0);
A.push_back(3.0);


A.push_back(-4.0);
A.push_back(0.0);
A.push_back(2.0);
A.push_back(-7.5);
A.push_back(0.0);
A.push_back(0.0);


A.push_back(0.0);
A.push_back(3.0);
A.push_back(6.0);
A.push_back(0.0);
A.push_back(0.0);
A.push_back(0.0);


A.push_back(2.0);
A.push_back(-2.0);
A.push_back(0.0);
A.push_back(0.0);
A.push_back(2.5);
A.push_back(0.0);


A.push_back(1.0);
A.push_back(0.0);
A.push_back(0.0);
A.push_back(0.0);
A.push_back(1.0);
A.push_back(0.0);

A.push_back(0.0);
A.push_back(0.0);
A.push_back(0.0);
A.push_back(0.0);
A.push_back(0.0);
A.push_back(6.0);


std::vector< double > P;
P.push_back(0.0);
P.push_back(0.0);
P.push_back(1.0);
P.push_back(0.0);
P.push_back(0.0);
P.push_back(1.0);

P.push_back(1.0);
P.push_back(0.0);
P.push_back(1.0);
P.push_back(1.0);
P.push_back(0.0);
P.push_back(0.0);

P.push_back(0.0);
P.push_back(1.0);
P.push_back(1.0);
P.push_back(0.0);
P.push_back(0.0);
P.push_back(0.0);

P.push_back(1.0);
P.push_back(1.0);
P.push_back(0.0);
P.push_back(0.0);
P.push_back(1.0);
P.push_back(0.0);

P.push_back(1.0);
P.push_back(0.0);
P.push_back(0.0);
P.push_back(0.0);
P.push_back(1.0);
P.push_back(0.0);

P.push_back(0.0);
P.push_back(0.0);
P.push_back(0.0);
P.push_back(0.0);
P.push_back(0.0);
P.push_back(1.0);


int n = 6;
std::vector<double> M = Spai_Algorithm(A, P, n);


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Output of the preconditioner M ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
std::cout << "END: Preconditioner: " << std::endl;
std::vector<double>::iterator iter;
std::cout.setf(std::ios::floatfield); // scientific-Notation
std::cout.setf(std::ios::adjustfield, std::ios::right); // rechtsb
Mat
 
Posts: 47
Joined: Sat Aug 19, 2006 9:54 am

Postby Mat » Mon Oct 09, 2006 7:11 pm

I have the bug.
In dormqr i have a wrong paramter for N! If it is greater than the number of columns of C than the function will write anywhere ....
i'm wondering why there is no exception call if the number of columns is greater than the real number of columns in the vector....? This is the reason why i had to spent over 60 hours of debugging work with 3 times reimplementation of the same code....very very very annoying!
Mat
 
Posts: 47
Joined: Sat Aug 19, 2006 9:54 am


Return to User Discussion

Who is online

Users browsing this forum: No registered users and 6 guests