2017-06-20 8 views
0

このポインターを自分の関数で使用した後で解放することはできません。 このエラーメッセージが表示されます。この関数は、単語の綴りが正しいかどうかを調べるために辞書をチェックする必要があります。ルートは最初のトライノードです。free()を使用してmallocedポインターを解放すると、無効なポインターが無効になる

`./speller '内のエラー:無料():無効なポインタ:0x00007fe53a80d848

はここで機能だ:

bool check(const char *word) 
{ 
    int pos=0; 
    int path; 
    char wordChar=*(word+pos); 
    wordTriePtr cursor=(wordTriePtr) malloc(sizeof(wordTrie)); 
    cursor=root; 
    while(wordChar!='\0') 
    { 
     path=determinePath(wordChar); 
     if(cursor->children[path]==NULL) 
     { 
      free(cursor); 
      return false; 
     } 
     else 
      cursor = cursor->children[path]; 

     wordChar=*(word+(++pos)); 
    } 
    if(cursor->isThisWord==true) 
    { 
     free(cursor); 
     return true; 
    } 
    else 
    { 
     free(cursor); 
     return false; 
    } 
} 

私が間違って何をしているのですか?

wordTriePtr cursor=(wordTriePtr) malloc(sizeof(wordTrie)); 
cursor=root; 

最初は変数cursorを定義し、割り当てるいくつかのメモリを指すように初期化:

+0

この問題のうちC++に関連する部分はありますか?そうでない場合は、C++タグを削除する必要があります。 –

+0

彼はmallocの結果をキャストしていますが、C++でなければなりません。 –

+0

@TomTanner Cをプログラミングするときにも初心者が多くいます。 –

答えて

5

は、これらの2行を詳しく見てみましょう。

第2行は変数をに再割り当てし、別の場所を指し示します。

はさらに下のループであなたはそれが再び再割り当て

cursor = cursor->children[path] 

を持っています。

再割り当ては、基本的

int a = 5; 
a = 10; 

と同等であり、次いでa5に等しくない理由を疑問。

私のと推測します。は、mallocfreeといってはいけません。

関連する問題