coin-or/Ipopt

Segmentation fault

yuyu-shi opened this issue · 1 comments

When I approx Hessian with limited-memory, a segment error occurs and when I turn off limited-memory, the program works fine.

Ipopt version: 3.14.4

the logs in gdb is as follow:

Thread 1 "pnd_node" received signal SIGSEGV, Segmentation fault.
dpotrf_ (uplo=<optimized out>, _n=<optimized out>, a=0x555555832010, _lda=<optimized out>, info=0x7fffffffc464) at /builds/infra/trunk_third-parties/qpoases/src/LAPACKReplacement.cpp:67
67	/builds/infra/trunk_third-parties/qpoases/src/LAPACKReplacement.cpp: 没有那个文件或目录.
(gdb) where
#0  dpotrf_ (uplo=<optimized out>, _n=<optimized out>, a=0x555555832010, _lda=<optimized out>, info=0x7fffffffc464) at /builds/infra/trunk_third-parties/qpoases/src/LAPACKReplacement.cpp:67
#1  0x00007ffff6853cde in Ipopt::IpLapackPotrf(int, double*, int, int&) () from /lib/libipopt.so.3
#2  0x00007ffff6849e21 in Ipopt::DenseGenMatrix::ComputeCholeskyFactor(Ipopt::DenseSymMatrix const&) () from /lib/libipopt.so.3
#3  0x00007ffff68e2f83 in Ipopt::LimMemQuasiNewtonUpdater::UpdateHessian() () from /lib/libipopt.so.3
#4  0x00007ffff68a7ba5 in Ipopt::IpoptAlgorithm::Optimize(bool) () from /lib/libipopt.so.3
#5  0x00007ffff696c8ec in Ipopt::IpoptApplication::call_optimize() () from /lib/libipopt.so.3
#6  0x00007ffff696ec98 in Ipopt::IpoptApplication::OptimizeNLP(Ipopt::SmartPtr<Ipopt::NLP> const&, Ipopt::SmartPtr<Ipopt::AlgorithmBuilder>&) () from /lib/libipopt.so.3
#7  0x00007ffff69675ad in Ipopt::IpoptApplication::OptimizeNLP(Ipopt::SmartPtr<Ipopt::NLP> const&) () from /lib/libipopt.so.3
#8  0x00007ffff696946e in Ipopt::IpoptApplication::OptimizeTNLP(Ipopt::SmartPtr<Ipopt::TNLP> const&) () from /lib/libipopt.so.3
#9  0x00007ffff7820808 in trunk::pnd::smoother::CosThetaSmoother::Smooth (this=0x555555798250, frame=std::shared_ptr<trunk::pnd::port::Frame> (use count 1, weak count 0) = {...}, reference_line=0x5555557741b8)
    at /home/trunk/code/trunk_pnd/src/reference_line_smooth/cos_theta_smoother/cos_theta_smoother.cc:60
#10 0x00007ffff7844bd8 in trunk::pnd::smoother::Smoother::SmoothAndCalRunTime (this=0x555555798250, frame=std::shared_ptr<trunk::pnd::port::Frame> (use count 1, weak count 0) = {...}, 
    reference_line_info=0x5555557740d0) at /home/trunk/code/trunk_pnd/src/reference_line_smooth/smoother.cc:31
#11 0x00007ffff779e55a in trunk::pnd::Planning::RunOnce (this=0x555555790f20, frame=std::shared_ptr<trunk::pnd::port::Frame> (use count 1, weak count 0) = {...}) at /home/trunk/code/trunk_pnd/src/planning.cc:48
#12 0x000055555560f360 in trunk::Processor::Process (this=0x555555799ce0) at /var/trunk/TrunkPilot/db/src/tad_soc_release/src/processor.cc:33
#13 0x00005555555f3182 in trunk::Node::Run (this=0x555555781920) at /var/trunk/TrunkPilot/db/src/tad_soc_release/src/node.cc:109
#14 0x00005555555dbaf6 in main (argc=1, argv=0x7fffffffd878) at /var/trunk/TrunkPilot/db/src/tad_soc_release/src/main.cc:11

Might be a problem with the Lapack integer type in qpOASES being long, while Ipopt probably expects int.

https://github.com/coin-or/qpOASES/blob/0b86dbf00c7fce34420bedc5914f71b176fe79d3/include/qpOASES/Types.hpp#L156-L162

You'll have to debug this a bit more, as we cannot reproduce.