无法制作<list <list <=“”int * =“”>&gt;工作

时间:2016-02-02 06:03:10

标签: c++ list pointers stl

尽管我花费了不合理的时间,但我仍然无法解决问题。我想要一个清单&lt;列表&LT; int *&gt; &gt;,但它不起作用。这是我的代码:

int main(int argc, const char * argv[]) {
   int a=2;
   int b=3;

   list<list<int*>> test;

   list< list<int*> >::iterator it;
   it = test.begin();

   it->push_back(&a);
   it->push_back(&b);

   b=4; //should modify the content of "test"

   for(list <int*>::iterator it2 = it->begin(); it2 != it->end(); it2++) {
      cout << *it2 << endl;
   }
}

使用xCode,它编译但我有一个&#34;线程1:EXC_BAD_ACCESS&#34;错误。我希望你能开导我!

谢谢!

1 个答案:

答案 0 :(得分:6)

test为空,因此test.begin()是一个单数迭代器,取消引用它是非法的。它会导致未定义的行为,类似于访问数组越界的行为。

你需要这样做:

test.emplace_back();
it = test.begin();

这将向test添加一个新的值初始化元素,因此它将成为包含零元素列表的单元素列表。然后it将指向该单个元素。