2017-12-27 11 views
-1

私はファイルから数えるプロジェクトを持っています。それは学校のプロジェクトなので、私はほとんどのライブラリを使うのではなく、基本的なものを使うことが許されています。したがって、私はハッシュマップを使用することに決めました。私のリンクリストはnullポインタの例外を与えます。正確には "例外がスローされました:読み取りアクセス違反 このは0xCCCCCCCCでした"。私は解決策を見つけるために多くを検索したが、何も見つかりませんでした。あなたの時間をありがとう。ここでリンクリストnullポインタエラーC++

public: liste() { 
     head = NULL; 
     tail = NULL; 
    } 

    void createnode(string value) { 
     liste(); 
     node* temp = new node; 
     temp->data = value; 
     temp->next = NULL; 

     if (head == NULL) { // get error here!!!! 

      head = temp; 
      tail = temp; 
      temp = NULL; 
     } 

     else { 
      tail->next = temp; 
      temp = tail; 
     } 
    } 

     int main() 
    { 
     struct site { 
      int count; 
      string name; 
     }; 
     unsigned long int i=0; 
     unsigned int x=0; 
     ifstream theFile("access_log"); 
     string word; 
     liste* table[100000]; 
     site list[10]; 

     while (theFile >> word) { 
      if (word.find(".")!=-1) { 
       if (word.find("H") == -1) { 
        x=(int)hashG(word); 
        if (x < 100000) {     
         table[x]->createnode(word); 
        } 
       } 
      } 

     } 
     for (int i = 0; i < 100000; i++) { 
      cout << table[i]->length() << " " << table[i]->getData() << endl; 
     } 
     return 0; 
    } 
+0

プログラムが未定義の動作を引き起こしたことを示す一般的なエラーです。おそらくあなたはどこかにポインタエラーがあることを意味します。 (また、あなたのプログラムは不完全です) – metal

+1

'liste * table [100000];'次に 'table [x] - > createnode(word);' 'table [x]'はどこで割り当て/初期化しますか? –

+0

ああ、私は実現しなかった、私はそれを割り当てる/初期化する必要があります。私が見たすべてのチュートリアルはそうしなかった。 – Redout

答えて

1

あなたは10000 LISTE-ポインタの配列

liste* table[100000]; 

を作成していますが、それらがポイントするための任意のLISTEオブジェクトを作成することはありません。 後で、テーブル内のあなたのポインタはまだあなたのコールのクラッシュを初期化されていないとして、メンバ関数

table[x]->createnode(word); 

を呼びたいです。

あなたはLISTE()呼ん私の仮定は、あなたが、私はまだ取得していない何

liste table[100000]; 

LISTEオブジェクトの配列であることをテーブルを持つようにしたいということです(コンストラクタ?)あなたののcreateNode機能で。

+0

初期化するのは申し訳ありませんでした。残りの部分についてはあなたが正しいです。 – Redout

0

あなたのクラス配列を初期化していないようですが、これが原因でこれが修正されました。

for (i = 0; i < 100000; i++) 
     { 
      table[i] = new liste; 

     } 

自分自身に留意してください:ボード上で発言している場合は、コード実装についてのチュートリアルは見ないでください。人々は物事を忘れるかもしれない。

関連する問題