0

(単純なリンクされた)リストを、リンクされたリストから派生したスキップリストに変換したいと思います。paramとして(リンク)リストを取得する変換コンストラクター内で、*でstackoverflowを取得します。私はそのctorをメインから一度だけ呼び出します。新しいSkipListがループワイズで呼び出される可能性はありますか?

class SkipList : public List {
public:     
    SkipList(SkipListEl* first) : List (first){};

    SkipList(const List& sl){                           
        ListEl* fst = sl.getFirst();
        new SkipList(fst);         // * <- stackoverflow

        while(fst->hasNext()){
            new SkipListEl(*fst);
            fst = fst->getNext();
        }
    };
4

1 に答える 1

2

動的オブジェクトの作成に関する基本的なC++ルールを確認する必要があります。new作成しているオブジェクトのコンストラクターを呼び出します。new objectのコンストラクターを呼び出すことによりobject、無限ループ(実際には無限再帰)が発生し、スタックスペースがなくなります。

于 2012-05-18T20:17:41.027 に答える