我创建了一个名为Rect
的类。我想创建一个向量,其中包含vector<Rect>
的地址,指向vector<Rect>
的指针。
这是我的代码:
std::vector< std::vector<Rect> *> *graph;
for(int i=0 ; i < 8; i++)
{
std::vector<Rect> *vecPtr= new std::vector<Rect>;
graph->push_back( vecPtr );
}
然而,g ++抱怨“Core Dumped”。
答案 0 :(得分:6)
尽可能避免使用指针,这显然是个好例子:
std::vector<std::vector<Rect> > graph(8);
这一行(几乎在概念上?)等同于你的代码,不泄漏内存,也不会核心转储。
截至您的特定问题,您从未为矢量矢量graph
分配内存,但您尝试在graph->push_back(vecPtr)
中访问它。
答案 1 :(得分:2)
您的最外层矢量未初始化。你实际上是在无所事事地调用push_back
。
std::vector< std::vector<Rect> *> *graph
= new std::vector< std::vector<Rect> *>();
这将解决您的直接问题,但我真的建议不要手动分配东西。您也可以使用:
std::vector< std::vector<Rect> > graph;
graph.push_back( std::vector<Rect>() );
虽然许多程序员会反对vector of vector
表现得非常糟糕(特别是在C ++ 98中)。
答案 2 :(得分:1)
graph是指向std::vector< std::vector<Rect> *>
的指针。你在哪里初始化它?它的价值是什么?
std::vector< std::vector<Rect> *> *graph;
graph->... // This is undefined behaviour
始终初始化变量。例如:
std::vector< std::vector<Rect> *> *graph = NULL;
这比您的代码更好,因为至少您知道该图形当前不指向实际的std::vector< std::vector<Rect> *>
对象。它是NULL。指针必须始终为NULL或分配给其类型对象的地址。
构造一个std::vector< std::vector<Rect> *>
,然后使用其地址初始化图形,如果您需要使用指针的话。例如:
std::vector< std::vector<Rect> *> someObject = new std::vector< std::vector<Rect> *>;
graph = &someObject;
现在您可以使用graph->
。
在任何情况下,在这种情况下很可能根本不需要使用指针,因此this answer是正确的。
答案 3 :(得分:0)
您尚未分配变量 graph 它可能是NULL或只是一个悬空指针。