我有一个类,我想为图像中的每个像素存储三个数据点 . 我认为std :: tuple是一个很好的方法,所以:
class CameraManager {
private:
static const int width_ = 700;
static const int height_ = 574;
//this causes a segfault...
std::tuple<double,double,bool> mapping_[width_][height_];
public:
CameraManager();
}
segfault直接发生在main(int argc,char ** argv),因为我在这个函数中声明了一个相机管理器对象 .
这里发生了什么?
2 回答
你在调用堆栈上放了6MB这样的东西 . 它实际上是你希望避免自动存储持续时间的大小 .
尝试动态分配它 .
让我们做一些计算:
std::tuple<double,double,bool>
在some machines上花费大约24个字节,因此矩阵700x574将花费大约9 '643' 200字节,即~10MB .大多数实现分配1MB,可能是2MB的堆栈大小 . 如果您的实现允许您指定更大的堆栈大小,则将其设置为大于~12MB的大小 .
否则动态分配
mapping_
:然后:
并且可能在
vector
上创建一个简单的矩阵视图 .