Неопределенное поведение с собственным вектором * Scalar + Vector * Scalar -> libigl / external / eigen и другими собственными конфликтами - PullRequest
2 голосов
/ 03 марта 2020

Я выискиваю странную ошибку во время выполнения в моем коде, которая соответствует. Я получаю то, что я считаю неопределенным поведением в строке, которая выглядит следующим образом: Eigen::Vector3d m = d1 * cos(theta) + d2 * sin(theta) где d1 и d2 - это Vector3d, а тета - двойное.

Если я переверну порядок операций, я не получу ошибку Например, Eigen::Vector3d m = cos(theta) * d1 + sin(theta) * d2

Более запутанные аспекты: 1. Я не могу воспроизвести эту ошибку в простом скрипте, поэтому пока нет минимального воспроизводимого примера: - \ Я могу получить этот эффект только в моем проекте, где, конечно, есть много чего еще происходит. 2. Мой сотрудник может прекрасно скомпилировать и запустить код на своем компьютере как на Windows, так и на компьютерах Ma c. 3. Эта ошибка возникает только при компиляции в режиме отладки. Компиляция в Release не вызывает ошибку в одном и том же месте.

Я запустил ASan и у меня есть вывод, и кажется очевидным, что есть доступ к памяти вне пределов, но ASan останавливается глубоко в библиотеке Eigen (Выход ASan включен). Я в растерянности, где go отсюда по этой проблеме.

Спасибо большое. Я относительно новичок в C ++, Eigen и ASan, поэтому, если требуется дополнительная информация, пожалуйста, дайте мне знать.

MacOS 10.15.3 Clang 11.0.1 C ++ 14

РЕДАКТИРОВАТЬ: Быть ясно, я не думаю, что это проблема Eigen Library, а скорее я пытаюсь определить, как происходит ошибка, и на данный момент похоже, что она, наконец, срабатывает в библиотеке Eigen. Любое понимание или объяснения были бы невероятно полезны!

==27180==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffee97dcef8 at pc 0x0001066d7773 bp 0x7ffee97dcac0 sp 0x7ffee97dcab8
WRITE of size 8 at 0x7ffee97dcef8 thread T0
    #0 0x1066d7772 in Eigen::internal::scalar_constant_op<double>::scalar_constant_op(Eigen::internal::scalar_constant_op<double> const&) NullaryFunctors.h:19
    #1 0x1066d7656 in Eigen::internal::scalar_constant_op<double>::scalar_constant_op(Eigen::internal::scalar_constant_op<double> const&) NullaryFunctors.h:19
    #2 0x1066dafa6 in Eigen::internal::evaluator<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> >::evaluator(Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const&) CoreEvaluators.h:473
    #3 0x1066dae9f in Eigen::internal::evaluator<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const>::evaluator(Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const&) CoreEvaluators.h:103
    #4 0x1066d9fc6 in Eigen::internal::evaluator<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const>::evaluator(Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const&) CoreEvaluators.h:103
    #5 0x1066da443 in Eigen::internal::binary_evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const>, Eigen::internal::IndexBased, Eigen::internal::IndexBased, double, double>::binary_evaluator(Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const&) CoreEvaluators.h:702
    #6 0x1066da22f in Eigen::internal::evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> >::evaluator(Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const&) CoreEvaluators.h:671
    #7 0x1066da14f in Eigen::internal::evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const>::evaluator(Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const&) CoreEvaluators.h:103
    #8 0x1066d9ec6 in Eigen::internal::evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const>::evaluator(Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const&) CoreEvaluators.h:103
    #9 0x106ab3735 in Eigen::internal::binary_evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const>, Eigen::internal::IndexBased, Eigen::internal::IndexBased, double, double>::Data::Data(Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> const&) CoreEvaluators.h:799
    #10 0x106ab3506 in Eigen::internal::binary_evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const>, Eigen::internal::IndexBased, Eigen::internal::IndexBased, double, double>::Data::Data(Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> const&) CoreEvaluators.h:799
    #11 0x106ab343e in Eigen::internal::binary_evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const>, Eigen::internal::IndexBased, Eigen::internal::IndexBased, double, double>::binary_evaluator(Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> const&) CoreEvaluators.h:757
    #12 0x106ab336f in Eigen::internal::evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> >::evaluator(Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> const&) CoreEvaluators.h:728
    #13 0x106ab2d96 in Eigen::internal::evaluator<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> >::evaluator(Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> const&) CoreEvaluators.h:728
    #14 0x106ab2954 in void Eigen::internal::call_dense_assignment_loop<Eigen::Matrix<double, 3, 1, 0, 3, 1>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const>, Eigen::internal::assign_op<double, double> >(Eigen::Matrix<double, 3, 1, 0, 3, 1>&, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> const&, Eigen::internal::assign_op<double, double> const&) AssignEvaluator.h:756
    #15 0x106ab274c in Eigen::internal::Assignment<Eigen::Matrix<double, 3, 1, 0, 3, 1>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const>, Eigen::internal::assign_op<double, double>, Eigen::internal::Dense2Dense, void>::run(Eigen::Matrix<double, 3, 1, 0, 3, 1>&, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> const&, Eigen::internal::assign_op<double, double> const&) AssignEvaluator.h:926
    #16 0x106ab25ed in void Eigen::internal::call_assignment_no_alias<Eigen::Matrix<double, 3, 1, 0, 3, 1>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const>, Eigen::internal::assign_op<double, double> >(Eigen::Matrix<double, 3, 1, 0, 3, 1>&, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> const&, Eigen::internal::assign_op<double, double> const&) AssignEvaluator.h:862
    #17 0x106ab22b3 in Eigen::Matrix<double, 3, 1, 0, 3, 1>& Eigen::PlainObjectBase<Eigen::Matrix<double, 3, 1, 0, 3, 1> >::_set_noalias<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> >(Eigen::DenseBase<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> > const&) PlainObjectBase.h:797
    #18 0x106ab1db9 in Eigen::PlainObjectBase<Eigen::Matrix<double, 3, 1, 0, 3, 1> >::PlainObjectBase<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> >(Eigen::DenseBase<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> > const&) PlainObjectBase.h:602
    #19 0x106ab1c18 in Eigen::Matrix<double, 3, 1, 0, 3, 1>::Matrix<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> >(Eigen::EigenBase<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> > const&) Matrix.h:423
    #20 0x106a5f606 in Eigen::Matrix<double, 3, 1, 0, 3, 1>::Matrix<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> >(Eigen::EigenBase<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> > const&) Matrix.h:424
    #21 0x106a5ad6c in ElasticRods::ElasticRod::initialize_rest_quantities() ElasticRod.cpp:84
    #22 0x106b612b1 in ElasticRods::ElasticRod::ElasticRod(ElasticRods::RodState const&, ElasticRods::RodState const&, ElasticRods::RodParams const&, Eigen::Matrix<double, -1, 1, 0, -1, 1> const&) ElasticRod.h:164
    #23 0x106b286d0 in ElasticRods::ElasticRod::ElasticRod(ElasticRods::RodState const&, ElasticRods::RodState const&, ElasticRods::RodParams const&, Eigen::Matrix<double, -1, 1, 0, -1, 1> const&) ElasticRod.h:162
    #24 0x106b2b88a in ElasticRods::read_config_from(char const*, bool) RodConfiguration.cpp:110
    #25 0x106c9d14c in ElasticRods::RodsSim::init_simulation() RodsSim.cpp:170
    #26 0x10691141b in ElasticRods::PhysicsSim::reset() PhysicsSim.h:96
    #27 0x10642904c in main::$_3::operator()() const main.cpp:52
    #28 0x106426a26 in main main.cpp:137
    #29 0x7fff73bd87fc in start (libdyld.dylib:x86_64+0x1a7fc)

Address 0x7ffee97dcef8 is located in stack of thread T0 at offset 88 in frame
    #0 0x106ab278f in void Eigen::internal::call_dense_assignment_loop<Eigen::Matrix<double, 3, 1, 0, 3, 1>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const>, Eigen::internal::assign_op<double, double> >(Eigen::Matrix<double, 3, 1, 0, 3, 1>&, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double, double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const, Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1, 0, 3, 1> const> const> const> const&, Eigen::internal::assign_op<double, double> const&) AssignEvaluator.h:752

  This frame has 3 object(s):
    [32, 88) 'srcEvaluator' (line 756) <== Memory access at offset 88 overflows this variable
    [128, 136) 'dstEvaluator' (line 762)
    [160, 192) 'kernel' (line 765)
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
      (longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow NullaryFunctors.h:19 in Eigen::internal::scalar_constant_op<double>::scalar_constant_op(Eigen::internal::scalar_constant_op<double> const&)
Shadow bytes around the buggy address:
  0x1fffdd2fb980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1fffdd2fb990: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1fffdd2fb9a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1fffdd2fb9b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1fffdd2fb9c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x1fffdd2fb9d0: 00 00 00 00 f1 f1 f1 f1 00 00 00 00 00 00 00[f2]
  0x1fffdd2fb9e0: f2 f2 f2 f2 f8 f2 f2 f2 f8 f8 f8 f8 f3 f3 f3 f3
  0x1fffdd2fb9f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1fffdd2fba00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1fffdd2fba10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1fffdd2fba20: 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==27180==ABORTING

РЕДАКТИРОВАТЬ: отредактированный заголовок, чтобы сделать его более доступным для новичков, как я, которые не уверены, где что-то идет не так.

1 Ответ

2 голосов
/ 04 марта 2020

Разговор в ветке комментариев действительно помог. Большое спасибо @chtz и @ pptaszni.

tl; dr При использовании libigl убедитесь, что ваши libigl/external/eigen и любые другие Eigen s, на которые вы ссылаетесь, точно соответствуют .

Ответ : еще один факт, о котором я не упомянул, это то, что я также использую libigl в этом проекте. Оказывается, что libigl извлекает свою собственную копию библиотеки Eigen, что позволяет очень легко иметь конфликтующие / смешанные библиотеки Eigen. Я проверил соответствующую версию Eigen для себя, которая соответствует версии libigl pull (в данном случае tag 3.3.7), и мои проблемы, похоже, были решены.

EDIT: Расширяя мой мыслительный процесс ...
Как указал chtz, если бы я был мастером, я бы не увидел строку 473 из CoreEvaluators.h в трассировке стека. Я пошел и подтвердил, что я был мастером (я был), и что строка 473 из CoreEvaluators.h действительно была закомментирована (это было).

Это заставило меня задуматься о том, что сказал pptaszni и как другие библиотеки могут есть противоречивые версии Eigen. Единственной другой библиотекой, на которую я ссылался, была libigl, поэтому я сделал нечеткую находку для CoreEvaluators.h, и оказалось, что внутри libigl/external/eigen была одна. Разница этого файла с предыдущим показала, что они действительно разные.

Переход в каталог libigl/external/eigen показал мне, какую ветку libigl извлекли (tag 3.3.7). Затем я пошел в свою личную библиотеку Eigen и проверил тот же тег, перекомпилировал, и моя странная проблема во время выполнения прояснилась.

...