【发布时间】:2011-07-16 16:21:57
【问题描述】:
我是 C++ 新手(我学习了 Fortran 编程),我想为多维表动态分配内存。该表是私有成员变量:
class theclass{
public:
void setdim(void);
private:
std::vector < std::vector <int> > thetable;
}
我想用 setdim() 函数设置表格的尺寸。
void theclass::setdim(void){
this->thetable.assign(1000,std::vector <int> (2000));
}
我编译这个程序没有问题,但是当我执行它时,我遇到了分段错误。
对我来说奇怪的是,这段代码(见下文)完全符合我的要求,只是它不使用我的类的私有成员变量:
std::vector < std::vector < int > > thetable;
thetable.assign(1000,std::vector <int> (2000));
顺便说一句,如果表格是一维向量,我没有问题。在课堂上:
std::vector < int > thetable;
如果在 setdim 中:
this->thetable.assign(1000,2);
所以我的问题是:为什么 2D 向量的 thetable 和 this->thetable 之间的“分配”有如此大的差异?我应该怎么做才能做我想做的事?
感谢您的帮助,
最好的问候,
-- 杰弗里
【问题讨论】:
-
错误肯定在其他地方。你能告诉我们这个类是如何使用的,以及它的复制构造函数和析构函数是什么样的吗?
-
如果您遇到分段错误,您是否查看了回溯以了解发生了什么?
-
如果你在调试器中,显示'this'的值——它可能是错误的。
-
我相信,
vector<vector<int> >不是二维数组的好选择。尽量考虑使用std::valarray或Boost.uBLAS -
我非常同意奥列格的观点。我看到你所做的一个主要问题是 (&thetable[1][0] - &thetable[0][1999]) 不是 1。
标签: c++ class vector dynamic-memory-allocation