0

私はクラス用の単純なlexプログラムに取り組んでおり、その中で非常に基本的なシンボルテーブルを作成しています。これは、検索用の線形スキャンを使用した文字列の配列です。私はそれを次のように宣言しました:

char* identifiers[100];

そして、私はそれを次のように使用しています:

found = false;
for (i = 0; i < seen_identifiers; i++) {
    if (!strcmp(identifiers[i], yytext)) {
        printf("Identifier \"%s\" already in symbol table", yytext);
        found = true;
        break;
    }
}
if (!found) {
    printf("identifier: %s\n", yytext);
    seen_identifiers++;
    identifiers[seen_identifiers] = yytext;
}

ただし、strcmp呼び出しで一貫してセグメンテーション違反が発生します。私は非常に単純なものを台無しにしたと確信しています。

4

1 に答える 1

4
seen_identifiers++;
identifiers[seen_identifiers] = yytext;

0から始まる場合seen_identifiersは、に割り当てることはないidentifiers[0]ため、strcmpに障害が発生します。

于 2009-10-11T19:17:51.870 に答える