std::cout 时的 eigen3.3.7 段错误

eigen3.3.7 segment fault when std::cout

描述

我正在用 Eigen 编写玩具代码。但是当我尝试打印矩阵时,不幸的是,我在 cout 时遇到了段错误。下面第一段代码是我遇到segmentation fault的项目代码。我知道如果我只写一小段代码作为第二段代码,它就可以正常工作。所以我不知道我的项目代码有什么问题,如图所示,它在 cout 中失败了。

C++代码

最起码的测试码是https://godbolt.org/z/GePx5b

#pragma pack(1)
#include <iostream>
#include <Eigen/Dense>
#include <string>
#include <fstream>
#define BUFFER_SIZE 256
#define WORK_SPACE "PositioningSystem/"

using Eigen::Matrix3d;

int main(int argc, char const *argv[]) {
            Eigen::Matrix3d m;
            m << 1, 2, 3,
                4, 5, 6,
                 7, 8, 9;
            std::cout << m << std::endl;
            return 0;
}

如果你写第一个代码#pragma pack(1),你会遇到段错误,如果你删除它,一切正常。

终于找到bug了

在一个包含文件中,我写了如下代码

#pragma pack(1) //指示struct不进行内存对齐

当我删除这段代码时,一切正常。有人对这个错误有任何想法吗?

更多关于这个

#pragma pack(1) 相同的代码可以 运行 在 arm 上,但如上所述在 x86 平台上失败。

x86 手臂

是的,我终于成功克服了这个问题。 #pragma pack错了。所以,请使用#pragma pop后面的句子,就像newdelete必须一样才能确保程序正确。