类中定义的大型数组的分段错误



我正在尝试在二维表面上编程一个三维向量场。我为它定义了一个类,以及几个函数。

只要 Lx*Ly 保持在某个值以下,一切正常。

如果我尝试定义一个更大的数组,它会给我一个分段错误。

这是非常简单的代码:

class CampVec{
public:
    double R[Lx][Ly][3]; //this makes space for the 3 components of the vector
                         //for each point in a Lx*Ly grid.
};

据我了解,问题是 CampVec 对象存储在堆栈而不是堆中,但是当定义在类中时,我无法找到如何解决此问题。

敢打赌这并不复杂,所以很抱歉,如果这是一个愚蠢的问题,我真诚地搜索并尝试了几件事,但无济于事。

最良好的祝愿和谢谢。

为什么要在堆栈上执行此操作?向量的内部结构取自堆,可以强制转换为类似于数组的外观:

#include <vector>
class CampVec{
    std::vector<double> _R; 
public:
    typedef double __AT[Lx][Ly][3];
    __AT &R;
    CampVec():_R(Lx*Ly*3),R( reinterpret_cast<__AT&>(&_R[0]) ){} // ctor
};

您还可以尝试查找编译器使用哪些编译器选项来增加堆栈大小,但为什么它必须在堆栈上?

相关内容

  • 没有找到相关文章

最新更新