user3923936
user3923936

Reputation: 71

copy constructor for queue seg fault

I need to do the copy constructor for the queue class. Here's my code. I don't know why I got a seg fault!

Queue::Queue()
{
  front = NULL;
  rear = NULL;
  numItems = 0 ;
}

// Copy constructor                                                                                                                                                                
Queue::Queue(const Queue& queueToCopy)
{
  //QueueNode *newNode;//pointer to a new node                                                                                                                                       
  QueueNode *nodePtr;//traverse pointer                                                                                                                                            

  newNode = new QueueNode;
  nodePtr = queueToCopy.front;
  while (nodePtr != NULL){
    enqueue(nodeNode->value);
    nodePtr = nodePtr->next;
  }
}

//////////////////////////// This is the main function when i testing the copy constructor

int main()
{
  Queue obj; 
  //enqueue....
  ...
  // Testing Queue copy constructor                                                                                                                           
  Queue objQ2(objQ);
  cout << "The values in the queue objQ2 were: \n";
  while (!objQ2.isEmpty()){
  int value;
  objQ2.dequeue(value);
  cout << value << endl;
  }
}

Upvotes: 0

Views: 389

Answers (2)

songyuanyao
songyuanyao

Reputation: 172934

I'm not sure what you want to do with newNode, but your loop's condition seems wrong, because newNode seems get never changed in the loop. As @RSaha's comment, Maybe newNode is not needed, so:

while (nodePtr != NULL){
  enqueue(nodePtr->value);
  nodePtr = nodePtr->next;
}

Upvotes: 4

chasep255
chasep255

Reputation: 12175

To me it looks like newNode can never be null so that loop continues until nodePtr = 0 in which case its next is invalid. Also newNode->value needs to be initialized.

Maybe change it to while(nodePtr != NULL)

Upvotes: 0

Related Questions