2014-08-28 2 views
0

대기열 클래스에 대한 복사 생성자를 수행해야합니다. 여기 내 코드가 있습니다. 나는 왜 나는 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; 
    } 
} 

//////////////////////////// 이 제가

복사 생성자 테스트 주요 기능은
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; 
    } 
} 
+2

루프에서 'newNode'는 어떻게 변경됩니까? – juanchopanza

+1

'newNode-> value'가 초기화되지 않은 채 사용 중일 수 있습니다 –

+0

'Queue' 클래스의 선언을 보지 않고 올바른 코드가 무엇인지 말하기는 정말 어렵습니다. – cdhowie

답변

4

newNode으로 무엇을하고 싶은지 확실치 않지만 newNode이 루프에서 변경된 적이 없으므로 루프 상태가 잘못되었습니다. RSaha의 코멘트 @으로, 어쩌면 newNode이 그렇게 필요하지 않습니다 : nodePtr = 0이 경우 그 다음이 유효하지 않습니다 때까지 루프가 계속 그래서 newNode처럼 보이는 나에게

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

'enqueue (nodePtr-> value);'? –

+0

고마워요. (nodePtr! = NULl)로 바꿨지 만, 메인에서 호출했을 때 여전히 seg 오류가 발생했습니다. – user3923936

+0

@RSahu 그래서 'newNode'는 여기서 무엇을합니까? – songyuanyao

0

는 null이 될 수 없다. 또한 newNode-> 값을 초기화해야합니다.

while (nodePtr! = NULL)으로 변경 가능