J'ai donc les lignes suivantes dans mon code:Eigen Jacobi provoquant segfault étrange dans C++
MatrixXd qdash = zeroCentredMeasurementPointCloud_.topLeftCorner(3, zeroCentredMeasurementPointCloud_.cols());
Matrix3d H = q * qdash.transpose();
Eigen::JacobiSVD<MatrixXd> svd(H, Eigen::ComputeThinU | Eigen::ComputeThinV);
Maintenant, je suis sûr que qdash
et H
sont en cours initialisés correctement (q
est aussi, juste ailleurs). La dernière ligne, impliquant Eigen::JacobiSVD
fait que le programme de lancer cette erreur quand il est laissé dans:
Program received signal SIGSEGV, Segmentation fault.
0xb0328af8 in _list_release() from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
0 0xb0328af8 in _list_release() from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
1 0xb032a464 in __free() from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
2 0xb0329f7d in free() from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
C.-À c'est seg-faulting en essayant de le libérer je suppose. Maintenant, selon le tutoriel here, tout ce que je devrait avoir à faire pour utiliser cette fonctionnalité est la suivante:
MatrixXf m = MatrixXf::Random(3,2);
JacobiSVD<MatrixXf> svd(m, ComputeThinU | ComputeThinV);
Quelqu'un peut-il voir pourquoi il ne parvient pas dans mon cas?
Ceci est la totalité de la trace de la pile? Comment pouvez-vous être sûr que "la dernière ligne" provoque le SEGFAULT? Lorsque j'avais des applications qui se plantaient sans raison apparente, j'ai couru le code avec les outils valgrind ou eFence afin de déterminer les faiblesses ou les problèmes qui pourraient y être associés. – janr
Quelle est la version Eigen? Assurez-vous de tester votre programme avec des assertions activées, c'est-à-dire sans -DNDEBUG ou les goûts. Et comme l'a dit Janr, la trace de la pile n'est clairement pas complète. – ggael
Je pense que c'est la dernière ligne parce que si je le commente il va exécuter le programme à la fin. Aussi c'est le même bogue qui cause les problèmes [ici] (http://stackoverflow.com/questions/14190767/identify-variable-causing-memory-error) Donc je ne peux pas utiliser le mode valgrind ou debug. Aussi, si j'inclus le code du tutoriel en bas de la question dans le rogramme, alors il se sépare sur la ligne réelle 'JacobiSVD <...', donc je ne suis pas sûr de ce qui se passe. –