Bugzilla – Bug 447

seg fault on (A * B)(0, 0)

Last modified: 2012-04-18 18:48:37 UTC

When I multiply two matrices and index into the product (without saving it to a matrix variable) I get a segmentation fault. The following program reproduces the problem for me. Note it seems to be some sort of infinite recursion. #include <Eigen/Dense> int main() { Eigen::MatrixXd A (1, 3); A << 1, 2, 3; Eigen::MatrixXd B (3, 1); B << 4, 5, 6; double p = (A * B)(0, 0); return 0; } I am using x86-64 Linux and GCC 4.6.2 with Eigen 3.0.5.

Thanks for the report. This is indeed an infinite recursion in ProductBase::coeff(), triggered by a product of dynamic-size matrices. Note that you can only index into a product if the result has size 1-by-1. This bug has been bresent for a while. One possible fix is to restrict indexing for *fixed-size* products of size 1-by-1. But this gives a difference between fixed and dynamic size which seems unnecessary. I implemented another fix and added a regression test (changeset 2bba8cc484ad for Eigen 3.0 and 0c2dd64f0b25 for Eigen 3.1)

Thanks Jitse for fixing it. To Bowie, since you know that A and B are vectors, you should really use vectors: huge speed up expected.