2

私はC++の初心者であり、リンクリスト内の要素を並べ替えるためのBubbleSort関数を定義しようとしています。しかし、エラーが発生します

for(current = firstPtr ; current != 0 ; current= current ->nextPtr)

言って

First-chance exception at 0x01375557 in 111.exe: 0xC0000005: Access violation reading  location 0x00000000.
Unhandled exception at 0x01375557 in 111.exe: 0xC0000005: Access violation reading location 0x00000000.    

コアコードは次のとおりです。

 //define Node in class List
 //Node.h
 template<typename T> class List;

template<typename T>
class Node{
friend class List<T>;

public:
Node(T &); //constructor
    T getData() const; //access data

private:
T data;
Node<T> *nextPtr; //point to the next Node
};

template<typename T>
Node<T> ::Node(T &key):data(key),nextPtr(0){}

template<typename T>
T Node<T>::getData()const{
return data;
}


//clase List
//List.h
#include<iostream>
#include"Node.h"
using namespace std;

template <typename T>
class List{
public:
List();
    void insertAtFront(T );
void insertAtBack( T &);
bool removeFromFront(T &);
bool removeFromBack(T &);
bool isEmpty() const;
void print() const;
    void BubbleSort();
private:
Node<T> *firstPtr;
Node<T> *lastPtr;

Node<T> *getNewNode(T&);

};

template<typename T>
List<T> :: List():firstPtr(0),lastPtr(0){}

template<typename T>
void List<T>::BubbleSort(){
Node<T> *current;  //Point to the current node
Node<T> *temp = firstPtr;  //hold the data of first element
    for(bool swap = true; swap;){  // if no swap occurs, list is in order
     swap =false;         
     for(current = firstPtr ; current != 0 ; current= current ->nextPtr){
         if (current->data > current->nextPtr->data){  //swap data
             temp->data = current->data;
             current->data = current->nextPtr->data;
             current->nextPtr->data = temp ->data;
             swap = true;
         }

     }
  }
}

修正を手伝ってもらえますか?デバッグを使用しましたが、それでも解決策が見つかりません。ありがとうございました。

4

1 に答える 1

1

current->nextPtr内側のループでは、そのデータを見ようとすると null ではないと想定しています。これは、リストの最後のノードには当てはまりません。内部ループ条件を次から変更してみてください

current != 0

current != 0 && current->nextPtr != 0

于 2013-03-17T05:10:24.597 に答える