0

そのため、シーケンシャル検索を使用して、配列内に文字列が出現する回数を確認しようとしています。私のプログラム内で、開いて処理したいファイルを選択するようにユーザーに依頼します。

void search(char **table, int **frequency, int wordSize)
{
//  Local Declaration
int i, j;
int count = 1;
char target[25];

// Statement
for(i = 0; i < wordSize; i++)
{
    if(table[i] != NULL)
    {
        strcpy(target, table[i]);
        for(j = i + 1; j < wordSize; j++)
        {
            if(strcmp(target, table[j]) == 0 && target != table[i])
            {
                count++;
                free(table[j]);
                table[j] = NULL;
            }
        }
    }
    count = 1;
}

return;
}

したがって、2つのファイルのうち、1つは問題なく開いて処理されますが、2番目のファイルを開こうとするとクラッシュします。どちらのファイルにも文字列が含まれているだけで、24文字を超える文字列はないため、プログラムがクラッシュする原因を理解しようとしています。

4

1 に答える 1

3
if(table[j] != NULL && strcmp(target, table[j]) == 0 && target != table[i])

前のイテレーションで編集したtable変数にアクセスしている可能性があります。NULL

于 2013-02-26T03:16:47.120 に答える