繁体   English   中英

特征向量*标量 + 向量*标量的未定义行为 --> libigl/external/eigen 和其他特征冲突

[英]Undefined Behavior with Eigen Vector*Scalar + Vector*Scalar --> libigl/external/eigen and other eigen conflicts

我正在我的代码中寻找一个奇怪的运行时错误,这是一致的。 我在一条看起来像这样的行上得到了我认为未定义的行为: Eigen::Vector3d m = d1 * cos(theta) + d2 * sin(theta)其中 d1 和 d2 是 Vector3d 而 theta 是双精度值。

如果我颠倒操作顺序,我不会得到错误,例如Eigen::Vector3d m = cos(theta) * d1 + sin(theta) * d2

更令人困惑的方面: 1. 我无法在一个简单的脚本中复制此错误,因此还没有最小的可重现示例:-\\ 我只能在我的项目中获得这种效果,当然还有很多事情要做。 2. 我的合作者可以在她的 Windows 和 Mac 机器上编译和运行代码。 3. 此错误仅在调试模式下编译时出现。 在 Release 中编译不会在同一个地方触发错误。

我已经运行了 ASan 并有输出,很明显存在内存访问越界,但 ASan 在 Eigen 库(包括 ASan 输出)的深处停止。 对于这个问题,我不知道从哪里开始。

谢谢一堆。 我对 C++、Eigen 和 ASan 比较陌生,所以如果需要更多信息,请告诉我。

MacOS 10.15.3 Clang 11.0.1 C++14

编辑:明确地说,我不认为这是一个特征库问题,而是我试图确定错误是如何发生的,截至目前,它看起来最终在特征库中触发。 任何见解或解释都会非常有帮助!

==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

编辑:编辑标题,使像我这样不确定哪里出错的新手更容易找到它。

评论线程中的对话确实有帮助。 非常感谢@chtz 和@pptaszni。

tl;dr使用libigl ,请确保您的libigl/external/eigen和您引用的任何其他Eigen完全匹配。

:另一个我没有提到的事实是,我也在这个项目中使用了libigl 事实证明, libigl提取自己的Eigen库副本,因此很容易出现冲突/混合的Eigen库。 我为自己检查了与libigl拉取的版本(在本例中为tag 3.3.7 )匹配的Eigen的相应版本,我的问题似乎已经解决。

编辑:扩展我的思维过程......
正如 chtz 指出的那样,如果我在 master 上,我就不会在CoreEvaluators.h中看到CoreEvaluators.h的第 473 行。 我去确认我在 master 上(我是)并且CoreEvaluators.h第 473 行确实被注释掉了(它是)。

这让我想到了 pptaszni 所说的以及其他库如何拥有相互冲突的 Eigen 版本。 我引用的唯一其他库是libigl ,所以我对CoreEvaluators.h做了一个模糊的查找, CoreEvaluators.h发现libigl/external/eigen里面libigl/external/eigen一个。 该文件与之前的文件的差异表明它们确实不同。

进入libigl/external/eigen目录向我展示了libigl检出的分支( tag 3.3.7 )。 然后我去了我的个人Eigen库并检查了相同的标签,重新编译并清除了我奇怪的运行时问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM