Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量的向量,坏的alloc_C++_Stdvector - Fatal编程技术网

C++ 向量的向量,坏的alloc

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); 过了一段时间后产生了一个错误(“在抛出'

我有一个名为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::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]);