0

私は語彙アナライザーを作成していますが、これは全体の機能です。この関数は、引数として char、c を取り、この char を既に定義されている char* 配列 (yytext) の末尾に追加します。次に、テキストの長さ (yylen) をインクリメントします。

この関数に入ると、表示されている行でセグメンテーション違反が発生し続けます。ここで何が間違っていますか?ありがとう。

ところで: strncpy/strcat などは使用できません (ただし、必要に応じて、その実装も表示できます)。

これは私のコードです:

extern char *yytext;
extern int *yylen;

void consume(char c){
    int s = *yylen + 1;                  //gets yylen (length of yytext) and adds 1
                                         //now seg faults here
    char* newArray = new char[s];
    for (int i = 0;i < s - 1;i++){
        newArray[i] = yytext[i];             //copy all chars from existing yytext into newArray
    }
    newArray[s-1] = c;                       //append c to the end of newArray
    for (int i = 0;i < s;i++){               //copy all chars + c back to yytext
        yytext[i] = newArray[i];
    }
    yylen++;
}
4

3 に答える 3

1

あなたが持っている

extern int *yylen;

しかし、次のように使用してみてください:

int s = (int)yylen + 1;

変数が の場合は、 のint *ように使用しint *、逆参照して を取得しintます。であることが想定されている場合はint、そのように宣言します。

于 2013-09-10T22:04:19.773 に答える