0

Main 関数の上に public として定義されている文字列へのポインターの配列があります。

char *Code[]={"MAIN:  add r3,  LIST",
            "LOOP: prn #48",
            "lea STR, r6",
            "inc r6",
            "mov r3, K",
            "sub r1, r4",
            "bne END",
            "cmp val1, #-6",
            "bne %END",
            "dec K",
            "jmp %LOOP",
            "END: stop",
            "STR: .string “abcd”",
            "LIST: .data 6, -9",
            ".data -100",
            ".entry K",
            "K: .data 31"};

A行に一連のタブとスペースがあるかどうかを確認する関数を作成しました。ある場合は、文字列を変更して、スペースまたはタブが1つだけになるようにする必要があります。

void SpaceTabRemover()//function to make sure there are no two tabs or spaces following eachother
{
    int i,j=0,k=0; //i=which line we are at, j=which char of the line we ar at, k=placeholder for the last char which equal to space or tab
    for(i=0;i<sizeof(Code)/sizeof(Code[0]);i++)
    {
        while(Code[i][j])
        {
            if ((Code[i][j]==' '||Code[i][j]=='\t')&&(Code[i][j+1]==' '||Code[i][j+1]=='\t'))//checks if there is a sequence of tabs and spaces
            {
                Code[j][k++]=Code[i][j];
            }
            j++;
        }
        Code[j][k]='\0';
    }
}

コードは見た目で動くはずだと思いますが、何か間違って書いて見えない場合を除き、

ここでの私の問題は、関数が A 行で 2 つのスペースまたはタブを見つけて、文字列を変更しようとする瞬間です。これまでに見たことのないエラーが発生します。

プログラムは、main.c.112 Code[j][k++]=Code[i][j] の SpaceTabRemover() でシグナル SIGSEGV セグメンテーション違反を受信しました

このエラーの意味と修正方法を教えてください。

4

1 に答える 1