【问题标题】:Eigen's matrix seems to preserve the memory in the different scope特征矩阵似乎保留了不同范围内的记忆
【发布时间】:2020-12-24 09:02:34
【问题描述】:

下面的sn-ps,我以为scope1和scope2的标准输出一定是一样的。然而,正如结果显示的那样,没有。结果意味着作用域2 中的m 继承了作用域1 中的一些值。我认为这很奇怪,因为 scoper1 中的 m 应该与 scope2 中的 m 无关。有人可以解释为什么会这样吗?

#include<iostream>
#include<Eigen/Core>
using namespace Eigen;

int main(){
  {
    std::cout << "scope1" << std::endl; 
    MatrixXd m(2, 2);
    std::cout << m << std::endl; 
    m << 1, 2, 3, 4;
    std::cout << m << std::endl; 
  }
  {
    std::cout << "scope2" << std::endl; 
    MatrixXd m(2, 2);
    std::cout << m << std::endl; 
    m << 1, 2, 3, 4;
    std::cout << m << std::endl; 
  }
}

输出

scope1
0 0
0 0
1 2
3 4
scope2
0 2
3 4
1 2
3 4

【问题讨论】:

  • 每个块中的第一个cout 打印未初始化的变量,即undefined behavior。任何事情都可能发生,包括某些值可能被“继承”,但实际上并非如此。

标签: c++ scope eigen eigen3


【解决方案1】:

The documentation 说:

构造一个具有rows 行和cols 列的未初始化矩阵。

读取uninitialized data 的程序具有undefined behaviour

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2016-09-14
    • 2014-11-16
    相关资源
    最近更新 更多