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

时间:2015-04-30 02:49:19

标签: arrays segmentation-fault

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

只要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对象存储在堆栈中而不是堆中,但是当定义在类中时,我还没能找到解决方法。

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

祝福,谢谢。

1 个答案:

答案 0 :(得分:0)

为什么要在堆栈中执行此操作? 向量的内部是从堆中获取的,可以转换为类似于您的数组:

#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
};

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