そのため、newPtr のデータを origPtr のデータと等しく設定しようとすると、for-control-structure の最初の lopp 内で seg fault を受け取ります。何が原因なのかわかりません。これはおそらく私のポインターの誤用ですか?それともタイプミス?それとも、私の for ループのイディオムの範囲エラーですか?
List::List(const List &aList): numNodes(aList.numNodes) {
empty = true;
forward = true;
string flag;
cout << "Copy from head to tail? (y/n): ";
cin >> flag;
if(flag=="n")
forward = false;
if(!aList.head) {
head = NULL; //aList is empty. so is this->List.
tail = NULL;
} else { // copy 1st Node.
head = new Node;
if(forward)
head->setData(aList.head->getData());
else // copy in reverse.
head->setData(aList.tail->getData());
//copy rest of List.
Node *newPtr = head; //newPtr points to last Node in new List.
//origPtr points to nodes in original List.
if(forward) {
cout << "Copying normally...\n" << endl;
for(Node *origPtr=aList.head->getNext(); origPtr!=NULL;
origPtr=origPtr->getNext()) {
newPtr = newPtr->getNext();
newPtr->setData(origPtr->getData()); //SEG FAULT
} // end for
cout << "3" << endl;
} else {
cout << "Copying in reverse order...\n" << endl;
for(Node *origPtr=aList.tail->getPrev(); origPtr!=NULL;
origPtr=origPtr->getPrev()) {
newPtr = newPtr->getNext();
newPtr->setData(origPtr->getData()); //SEG FAULT
} // end for
} // end if/else
newPtr->setNext(NULL);
} // end if/else
cout << "Done copying!\n" << endl;
} // end copy constructor
さらにコードが必要な場合は、必要な編集を行います。
また、c++11 の標準は nullptr を使用することであることも承知しています。この実装には使用しません。gcc-v4.6.3 を使用して Ubuntu 12.04 を実行していますが、これは c++11 をサポートしていません。
編集:みんなありがとう!そこで、newPtr が getNext() を指す前に、for ループに 3 行追加しました。newPtr を head を指すように定義した後、次の行で newNode を NULL を指す Node ポインターとして宣言しました。
newNode = new Node;
newNode->setPrev(newPtr);
newPtr->setNext(newNode);