2

トライでポインタの割り当てを解除しようとしています。ここに私のトライ構造があります

struct trie
{
    int x;
    trie *next[26];
};

trie *head;
trie *tmp;

そして、これがdfsを使用した私の割り当て解除関数です

void deallocate(trie *cur)
{
    for (int a=0; a<=25; a++)
    {
        if (cur->next[a] != NULL)
        {
            tmp = cur->next[a];
            cur->next[a] = NULL;
            deallocate(tmp);
        }
    }
    free(cur);
}

ここに私の頭のinit関数があります

void init()
{
    head = new trie;
    head->x = 0;
    for (int a=0; a<=25; a++)
    {
        head->next[a] = NULL;
    }
}

プログラムの終了後、私は電話しましたdeallocate(head);

私はポインターのことは本当に初めてです。私の割り当て解除関数に何か問題がありますか? ありがとう

配列サイズを変更して受け入れられました:)問題はポインターではないようです:)みんなありがとう

4

3 に答える 3

2

を使用newしてメモリを割り当てfree、解放します。私が見ることができる唯一のエラーは、、またはで使用newする必要があるということです。deletemallocfree

于 2012-12-27T10:44:35.823 に答える
1

空の入力に対して関数が正しくありません。deallocate(NULL)クラッシュします。関数 (特にフレームワークを構成する一般的な関数) は、自己完結型であり、可能なすべての入力をカバーできる必要があります。

于 2012-12-27T10:47:03.107 に答える