创建二维向量时出错。

时间:2014-01-24 14:21:08

标签: c++ vector g++

我创建了一个名为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”。

  1. 我理解的错误是什么?为什么?
  2. 我该如何解决?正确的代码?

4 个答案:

答案 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或只是一个悬空指针。