Pergunta

Estou trabalhando em um programa Lex simples para a aula e, nele, estou criando uma tabela de símbolos muito rudimentares, apenas uma variedade de cordas com uma varredura linear para pesquisa. Eu declarei como:

char* identifiers[100];

E eu estou usando assim:

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;
}

No entanto, eu sempre recebo um segfault na chamada STRCMP. Tenho certeza de que estraguei algo super simples.

Foi útil?

Solução

seen_identifiers++;
identifiers[seen_identifiers] = yytext;

Se seen_identifiers começa em 0, você nunca atribui a identifiers[0] e então o strcmp falhará.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top