C++ 向量的向量,坏的alloc
我有一个名为Contact的类,我想构建一个指向这些对象的指针的数据结构,比如127行20列的矩阵。 我试着以这种方式使用std::vector类C++ 向量的向量,坏的alloc,c++,stdvector,C++,Stdvector,我有一个名为Contact的类,我想构建一个指向这些对象的指针的数据结构,比如127行20列的矩阵。 我试着以这种方式使用std::vector类 std::vector < std::vector<Contact* > > matrix (127, std::vector < Contact* > (20)); 但是使用push_-back函数 Buckets[pot].push_back(cont_temp); 过了一段时间后产生了一个错误(“在抛出'
std::vector < std::vector<Contact* > > matrix (127, std::vector < Contact* > (20));
但是使用push_-back函数
Buckets[pot].push_back(cont_temp);
过了一段时间后产生了一个错误(“在抛出'std::bad_alloc'实例后调用terminate”),我不知道如何修复它
还有其他更好的方法来实例化和初始化矩阵吗?您是否会建议其他解决方案,而不是使用向量向量(boost::multiarray..?)
谢谢
(很抱歉这个愚蠢的问题,我是个差劲的学生:)
编辑:我发现了错误(只是一个超出范围的作业)。如果您对这种数据结构有一般性的建议,我仍然在这里…矩阵中的联系人是动态分配的吗?如果是,当你说:
Buckets = matrix;
最后,两个指针指向同一个动态分配的对象,这只会带来麻烦。您应该使用智能指针的向量,例如Boost的共享指针。当您说“过一段时间”时,这是什么意思?std::bad_alloc表示内存不足。您是否有一个占用内存的循环?如果您只想使用已知大小的2d矩阵,您可以使用一个简单的数组:
(Contact*) matrix[127][20];
当然,如果大小可以在编译后确定或更改,这种方法就不起作用。
在这种情况下,我建议您转向boost库,尤其是multi_数组
有关简短示例或完整文档,请参阅
typedef boost::multi_array<Contact*, 2> ContactContainer;
ContactContainer matrix(boost::extents[127][20]);
typedef boost::多数组ContactContainer;
ContactContainer矩阵(boost::extensts[127][20]);
您是否使用调试器?如果是这样的话,你可以停在抛出异常的地方,看看那里发生了什么。但要小心不要使用std::auto_ptr,因为它的所有权转移语义导致它不能保存在标准容器中使用
(Contact*) matrix[127][20];
typedef boost::multi_array<Contact*, 2> ContactContainer;
ContactContainer matrix(boost::extents[127][20]);