我正在尝试在二维表面上编程一个三维向量场。我为它定义了一个类,以及几个函数。
只要 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
};
您还可以尝试查找编译器使用哪些编译器选项来增加堆栈大小,但为什么它必须在堆栈上?