0

私は、初期化リストを引数として取る独自の List クラスのコンストラクターを作成することになっている学校での課題に取り組んでいます。

これは私ができるようにしたいことです:

List ourList {1, 2, 3};

これは私がこれまでに持っているものです:

List::List(std::initializer_list<int> il)
{
  head_ = copy(il.begin(), il.end());
}

List_Node* List::copy(std::initializer_list<int>::iterator begin,
                      std::initializer_list<int>::iterator end)
{
  if(begin == end)
    return nullptr;

  List_Node* new_list = new List_Node(*begin);

  List_Node* node = copy(begin++, end);
  new_list->next_ = node;
  return new_list;
}

私の謙虚な意見では、これはうまくいくはずです。ただし、初期化 ( List list {1,2,3};) を試みると、seg-fault が発生します。誰かが私がここで間違っていることを説明してもらえますか?

4

1 に答える 1

6
List_Node* node = copy(begin++, end);

これはcopy、同じ引数で再度呼び出され、永久に再帰され、完了することはありません。

デバッガーを使用してクラッシュした場所を確認することで、これを知ることができたはずList::copyです。予想していた 3 回の呼び出しではなく、何百もの への呼び出しがあったことがわかります。

あなたはしたく++beginないbegin++

于 2014-03-24T13:37:07.303 に答える